【发布时间】: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(一)
标签: python python-3.x