我嘗試更改串列中的一個值,但所有鍵的所有值都會更改。
vertex_list = ['a','b']
distance_dict = dict.fromkeys(vertex_list, [10, 'None'])
distance_dict['a'][0] = 1
print(distance_dict)
輸出:
{'a': [1, 'None'], 'b': [1, 'None']}
當我用傳統的 { } 構建字典時,它作業正常。我想問題出在dict.fromkeys中的串列上,它為所有字典鍵創建了一個串列。有沒有解決方案來解決它。不使用 ''for'' 和 { } 來構建字典?
uj5u.com熱心網友回復:
參考官方檔案,
fromkeys()是一個回傳新字典的類方法。值默認為None. 所有的值都只參考一個實體, 因此 value 是一個可變物件(例如空串列)通常是沒有意義的。要獲得不同的值,請改用dict 理解。
表示如果第二個引數是單例實體(如) ,這dict.fromkeys很有用。None所以解決方案是使用dict理解。
distance_dict = {vertex: [10, None] for vertex in vertex_list}
uj5u.com熱心網友回復:
你可以解決:
vertex_list = ['a','b']
distance_dict = {x: [10, 'None'] for x in vertex_list}
distance_dict['a'][0] = 1
print(distance_dict)
輸出:
{'a': [1, 'None'], 'b': [10, 'None']}
uj5u.com熱心網友回復:
如果您列印 distance_dict 創建的值的 id dict.fromkeys:
vertex_list = ['a','b']
distance_dict = dict.fromkeys(vertex_list, [10, 'None'])
print(id(distance_dict['a']), id(distance_dict['b']))
print(id(distance_dict['a']) == id(distance_dict['b']))
輸出:
2384426495040 2384426495040
True
distance_dict['a']并且distance_dict['b']實際上是同一個list物件,占用同一個記憶體空間。
如果您使用 dict 理解:
distance_dict = {vertex: [10, None] for vertex in vertex_list}
print(id(distance_dict['a']) == id(distance_dict['b']))
輸出:
False
它們是具有相同元素的不同串列物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/530411.html
標籤:Python列表字典
上一篇:如何跳過bs4標簽內的一些迭代?
下一篇:將字串轉換為具有值串列的字典
