我有一个具有相似值的嵌套字典:
{'Gryffindor': {'Arithmancy': 0.0, 'Astronomy': 0.0, 'Herbology': 0.0, 'Defense Against the Dark Arts': 0.0}
'Hufflepuff': {'Arithmancy': 0.0, 'Astronomy': 0.0, 'Herbology': 0.0, 'Defense Against the Dark Arts': 0.0}}
我想更新单个值。问题是当我更新dict ['Gryffindor'] ['Arithmancy']时也会更新dict ['Hufflepuff'] ['Arithmancy']。 我真的不知道为什么。
我使用这个:
thetas["Gryffindor"]["Arithmancy"] = 12
我已经得到了这个结果:
{'Gryffindor': {'Arithmancy': 12, 'Astronomy': 0.0, 'Herbology': 0.0, 'Defense Against the Dark Arts': 0.0}
'Hufflepuff': {'Arithmancy': 12, 'Astronomy': 0.0, 'Herbology': 0.0, 'Defense Against the Dark Arts': 0.0}}
有什么想法吗?
编辑:
感谢您的答复,这是我使用的循环:
thetas = {'Gryffindor': {'Arithmancy': 0.0, 'Astronomy': 0.0, 'Herbology': 0.0, 'Defense Against the Dark Arts': 0.0}
'Hufflepuff': {'Arithmancy': 0.0, 'Astronomy': 0.0, 'Herbology': 0.0, 'Defense Against the Dark Arts': 0.0}}
for _, house in thetas.items():
for k, v in house.items():
house[k] = 0.1
print(thetas)
exit()
答案 0 :(得分:0)
这取决于您如何为dict
中的键分配值。显然,您遇到以下情况:
class_grades = {"Arithmancy": 0.0, "Astronomy": 0.0, ...}
thetas = {"Gryffindor": class_grades, "Hufflepuff": class_grades, ...}
不过,您到达那里的确切时间是,当您访问/修改thetas["Gryffindor"]
时,它与thetas["Hufflepuff"]
中引用的对象/实例是完全相同的。即这取决于您最初填充dict
的方式。您可以通过询问每个嵌套id()
的{{1}}来验证假设:
dict
唯一实例具有唯一ID。相同的对象/实例报告相同的ID。
如果您想拥有初始值print([id(i) for i in thetas.values()])
,然后填充每个“房屋”,则可以实例化一个新的dict(具有相同的值)...在这种情况下(无需进一步嵌套),只需调用dict
就足够了,例如:
dict()