如何迭代更新字典的值并将每个表示添加到列表中[重复]

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 over dict.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,查看最新更新

以上是关于如何迭代更新字典的值并将每个表示添加到列表中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 2.6 上合并 n 字典和添加值的最快方法 [重复]

迭代列表并将该值用于字典键[重复]

给定一个字符串列表,如果任何值等于列表中的值,我想将字典的值添加到新字典中[重复]

如何迭代数据列的每个单元格,转换和附加每个单元格?

遍历现有键并更新字典python

如何将文本输入值添加到kivy python中字典中的值?