使用.fromkeys初始化嵌套的dict

时间:2017-08-08 17:43:40

标签: python dictionary nested

您好我想知道在创建嵌套字典时使用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的所有外键的所有值。

我想知道为什么在使用此函数制作嵌套字典时会发生这种情况

1 个答案:

答案 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}}