如何迭代更新字典的值并将每个表示添加到列表中[重复]
Posted
技术标签:
【中文标题】如何迭代更新字典的值并将每个表示添加到列表中[重复]【英文标题】:How to iteratively update the value of a dict and add each representation to a list [duplicate] 【发布时间】:2019-10-06 14:23:01 【问题描述】:当我在循环中更新字典的值时,它也会更改列表中已有字典的值。
我已经在 Python 3.7 中尝试过以下代码
d = "name": "v0"
a = []
b = ["v1", "v2", "v3"]
for i in b:
d["name"] = i
a.append(d)
print(a)
我希望它在循环中更改字典,并将每个表示添加到列表中。但是,它会将相同的值添加到列表中。
【问题讨论】:
永远不要尝试通过迭代字典并就地修改字典来修改它。要么use a dict comprehension overdict.items()
,要么复制字典。
这里的预期输出是什么?
您的代码每次都会覆盖键值,因为您将单个键用作硬编码。字典不允许您多次存储同一个键。
如果您使密钥动态且不同,它允许您存储它: b = ["v1", "v2", "v3"] d = "name": "v0" for i in range(len(b)): d["name-"+str(i)]=b[i] print(d) 否则直接追加而不分配给dict每个键值对元素:a=["name ": "v0"] b = ["v1", "v2", "v3"] for i in range(len(b)): a.append("name":b[i]) print(一)
【参考方案1】:
每次创建一个新字典:
a = []
b = ["v1", "v2", "v3"]
for i in b:
a.append("name": i)
print(a)
作为理解:
a = ["name": i for i in b]
如果你的字典太大大,你可以用理解从它重建另一个:
a = ["name": i if k == "name" else k:v for k,v in d.items() for i in b]
【讨论】:
打我一拳 :) +1 谢谢!我的字典远大于一个值,我不想再用代码写出我的完整字典。有没有一种 Pythonic 方式来改变字典中的值? @lorenzkort,查看最新更新以上是关于如何迭代更新字典的值并将每个表示添加到列表中[重复]的主要内容,如果未能解决你的问题,请参考以下文章