如何修改 Python 字典值并创建字典列表?

Posted

技术标签:

【中文标题】如何修改 Python 字典值并创建字典列表?【英文标题】:How to modify Python dictionary value and create the list of dictionaries? 【发布时间】:2016-09-30 17:17:53 【问题描述】:

我想修改字典并创建一个列表,其中包含具有修改后值的字典。我试过了:

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]

我该怎么做?

【问题讨论】:

【参考方案1】:

那是因为您只是创建了对同一个对象(您的字典)的多个引用,并将一次性变量 i 分配给在最后一次迭代中保存 333 的键并将其分配给 two 键,您的所有字典名称将指向与项目 ('two', 333) 相同的对象。

您可以使用字典推导来解决这个问题:

>>> 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]

如果您有多个要修改的键,作为一种更 Pythonic 的方法,您可以这样做:

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

【讨论】:

感谢您的快速回复。其作品。附加问题,如果我想修改 2 个或更多值非常长的字典。你有一个强大而优雅的解决方案吗?

以上是关于如何修改 Python 字典值并创建字典列表?的主要内容,如果未能解决你的问题,请参考以下文章

对比Python中的列表元组字典集合字符串等之间异同

Python 基础入门笔记———— 字符串列表元组集合字典

Python列表元组字典集合存储结构

python笔记04:字典

python 一个由字典构成的列表,修改其中1个字典的键的值,却把该列表所有字典相同的键的值都一起修改了?

猿编程怎么替换字典里的值