Python中使用遍歷在列表中新增字典遇到的坑

2022-10-04 07:54:07 字數 1521 閱讀 1296

"""

已知列表li = [, , , ] ,

定義乙個函式,將該列表按照其元素的value

值進行排序,並輸出結果

"""思路很清晰,新建乙個列表,然後遍歷取出字典的值加入到新的列表中,再通過遍歷,賦值字典,使用append方法依次新增到列表,這樣就是乙個按照value值排續.於是有了下面的**:

li = [, , , ]

def fun(li):

li_1 = # 接收value值

li_2 = # 接收新的字典

dict_1 = {}

for i in range(len(li)):

li_1.append(li[i]["key"])

li_1.sort() # 排序

for i in li_1:

ceihfqmmxdict_1["key"] = i

print(dict_1)

li_2.append(dict_1)

return li_2

print(fun(li))

但是執行的結果卻是:

[, , , ]

很明顯,取值被最後乙個傳入value的9全部替換了.為什麼會這樣呢程式設計客棧3;

開始懷疑是不是和字典中重複賦值給"key"有關,但是也不應該啊,每次遍歷的時候就是已經把字典append到l程式設計客棧ist中去了啊!

於是使用print(id(dict_1)),檢視記憶體資訊,發現這個現象:

2874566784272

2874566784272

2874566784272

2874566784272

居然都是同一位址!!再檢視list中的每個元素位址:

for i in li_2:

print(id(i))

結果:(print(id(dict_1))也列印了)

2501747356944

2501747356944

2501747356944

2501747356944

2501747356944

2501747356944

2501747356944

2501747356944

於是明白了,因為每次新增的都是同乙個記憶體到list中去了,dict_1每次寫入的時候改變了記憶體中的value,程式設計客棧但是位址不變,即是,建立了一次記憶體空間,只會不斷的改變value了.完善方法:每次遍歷時候建立乙個新的dict_1.

**:def fun(li):

li_1 =

li_2 =

for i in range(len(li)):

li_1.append(li[i]["key"])

li_1.sort() # 排序

for i in li_1:

dict_1 = {} # 每次遍歷時建立乙個新的記憶體

dict_1["key"] = i

li_2.append(dict_1)

return li_2

print(fun(li))程式設計客棧

總結

在python中使用中文 在python中,使用

我需要確保在python中使用特定引數呼叫函式。我用magic mock模擬了這個函式。在self.function magicmock self.function subject hello world 有什麼東西存在於 或者self.function.assert called with sub...

Python列表細節分享 在 中使用for迴圈

用xpath爬取多個url時,可以通過在中使用for迴圈的方式將所需列表返回 如下 def parse index html etree lxml.html.etree e etree.html html all url e.xpath div class channel detail movie ...

遍歷Python中的列表

list 等效於其他語言中的陣列,其額外的好處是可以動態調整大小。在python中,列表是資料結構中的一種容器,用於同時儲存多個資料。與sets不同,python中的列表是有序的,並且具有確定的計數。有多種方法可以迭代python中的列表。讓我們看看在python中迭代列表的所有不同方法,以及它們之...