2017-08-08 57 views
0

您好我想知道什么时候创建一个嵌套字典使用fromkeys方法来创建一个嵌套字典不起作用。Initailizing嵌套字典与.fromkeys

x=[1,2,3,4,5] 
y=[7,8,9,10,11] 
zx=dict.fromkeys(x,dict.fromkeys(y,0)) 

它创建了一个嵌套的字典,但是当您尝试更新它

ZX [1] [8] + = 1

它更新所有值是有钥匙8的所有outerkeys。

我想知道为什么使用此功能时,使嵌套字典发生这种情况是因为你相关的所有

+0

。 –

回答

1

ys的外部字典与相同内部字典。您首先制作了一本dict.fromkeys(y,0)的字典,然后您将该字典与所有关键字相关联:dict.fromkeys(x,...)

构建所需的字典的方式是例如字典解析

zx = {k: dict.fromkeys(y,0) for k in x} 

虽然这看起来完全一样它不是:在这里,我们会为kx评估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}} 
+0

难道你不会得到不可用的类型列表吗?那么我需要制作列表元组吗? – user6656104

+0

@ user6656104:但键不是列表,键是列表的*元素*。鉴于这些元素是可散列的(如整数,字符串等),那么没有问题。 –

+0

哦,我明白了,谢谢 – user6656104