您好我想知道在创建嵌套字典时使用fromkeys方法创建嵌套字典是行不通的。
x=[1,2,3,4,5]
y=[7,8,9,10,11]
zx=dict.fromkeys(x,dict.fromkeys(y,0))
它会创建一个嵌套的dict,但是当你尝试更新它时
ZX [1] [8] + = 1
它会更新具有密钥8的所有外键的所有值。
我想知道为什么在使用此函数制作嵌套字典时会发生这种情况
答案 0 :(得分:1)
这是因为您将外部字典的所有键与相同的内部字典相关联。您首先使用dict.fromkeys(y,0)
构建了一个字典,然后将该字典与所有键关联起来:dict.fromkeys(x,...)
。
构建所需词典的方法是例如词典理解:
zx = {k: dict.fromkeys(y,0) for k in x}
虽然看起来非常相似但不是:在这里,我们将{em> k
中的每个 x
再次评估dict.fromkeys(y,0)
。因此,构造的字典将全部等同于,但不相同的对象。
现在我们获得了预期的结果:
>>> x=[1,2,3,4,5]
>>> y=[7,8,9,10,11]
>>> zx = {k: dict.fromkeys(y,0) for k in x}
>>> zx
{1: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 2: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 3: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 4: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 5: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}}
>>> zx[1][8]+=1
>>> zx
{1: {8: 1, 9: 0, 10: 0, 11: 0, 7: 0}, 2: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 3: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 4: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 5: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}}