簡體   English   中英

如何修改Python字典值並創建字典列表?

[英]How to modify Python dictionary value and create the list of dictionaries?

我想修改字典並創建一個列表,其中包含具有修改后的值的字典。 我試過了:

mylist = []
mydict = {"one": 10, "two": 20, "three": 30}
for i in [111, 222, 333]:
   mydict["two"] = i
   mylist.append(mydict)

mylist返回:

[{'three': 30, 'two': 333, 'one': 10}, {'three': 30, 'two': 333, 'one': 10},  {'three': 30, 'two': 333, 'one': 10}]

我希望得到:

[{'three': 30, 'two': 111, 'one': 10}, {'three': 30, 'two': 222, 'one': 10},  {'three': 30, 'two': 333, 'one': 10}]

我該怎么做?

那是因為您只是創建對同一對象(您的字典)的多個引用,並且通過將一次性變量i分配給您的鍵(在上一次迭代中保存333並將其分配給two鍵),所有字典名稱都將指向同一對象帶有項目('two', 333)

您可以使用dict理解來解決此問題:

>>> mylist = [{"one": 10, "two": i, "three": 30} for i in [111, 222, 333]]
>>> mylist
[{'three': 30, 'two': 111, 'one': 10}, {'three': 30, 'two': 222, 'one': 10}, {'three': 30, 'two': 333, 'one': 10}]

或者,您可以在每次迭代中創建初始對象的副本,以便創建一個新對象,而不僅僅是復制引用。

>>> from copy import copy
>>> mylist = []
>>> mydict = {"one": 10, "two": 20, "three": 30}
>>> for i in [111, 222, 333]:
...    mydict["two"] = i
...    mylist.append(copy(mydict))
... 
>>> mylist
[{'one': 10, 'three': 30, 'two': 111}, {'one': 10, 'three': 30, 'two': 222}, {'one': 10, 'three': 30, 'two': 333}]

而且,如果您有多個要修改的鍵,則可以使用以下更Python化的方法進行操作:

>>> for i, j in zip(my_keys, my_new_values):
...    mydict[i] = j
...    mylist.append(copy(mydict))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM