国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中使用遍歷在列表中添加字典遇到的坑

2020-02-16 01:23:56
字體:
來源:轉載
供稿:網友
"""已知列表li = [{"key": 5}, {"key": 9}, {"key": -1}, {"key": 4}] ,定義一個函數,將該列表按照其元素的value值進行排序,并輸出結果"""

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

li = [{"key": 5}, {"key": 9}, {"key": -1}, {"key": 4}]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:    dict_1["key"] = i    print(dict_1)    li_2.append(dict_1)  return li_2print(fun(li))

但是運行的結果卻是:

[{'key': 9}, {'key': 9}, {'key': 9}, {'key': 9}]

很明顯,取值被最后一個傳入value的9全部替換了.為什么會這樣呢?

開始懷疑是不是和字典中重復賦值給"key"有關,但是也不應該啊,每次遍歷的時候就是已經把字典append到list中去了啊!

于是使用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_2print(fun(li))

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林站長站的支持。如果你想了解更多相關內容請查看下面相關鏈接

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹿泉市| 乐东| 贵德县| 镇坪县| 天长市| 乌拉特前旗| 永顺县| 吴江市| 西乡县| 泽州县| 昆山市| 军事| 海门市| 务川| 林周县| 红安县| 东方市| 黎川县| 双辽市| 和顺县| 达州市| 汨罗市| 东海县| 大丰市| 古浪县| 山丹县| 游戏| 银川市| 陵川县| 宝鸡市| 遵化市| 和静县| 靖西县| 通州区| 南和县| 察隅县| 晋江市| 柯坪县| 柯坪县| 广平县| 丹东市|