"""
已知列表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中迭代列表的所有不同方法,以及它們之...