Python嵌套字典如何独立更新值

时间:2020-03-30 22:37:59

标签: python dictionary nested

我有一个具有相似值的嵌套字典:

{'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()

1 个答案:

答案 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()