首页 > 解决方案 > Python在循环中分配给嵌套字典

问题描述

我正在尝试将值分配给嵌套字典,但它给出了意外的输出。用下面的简单变量举例说明问题。

a={1:[None,None],
    2:[None,None]}
b= collections.defaultdict(collections.defaultdict)

for i in range(0,3):
    if i == 1:
        a[1] = [2,3]
    if i == 2:
        a[1] = [1,1]
    b[i] = a

b 的值是:

{ 0: {1: [1,1], 2: [None,None]},
  1: {1: [1,1], 2: [None,None]},
  2: {1: [1,1], 2: [None,None]}}

这不是我期望的输出。我认为这是因为我已将变量“a”作为值分配给每个键,并且一旦变量和“a”的值更新,它就会更新字典中所有键的引用。

我的用例是变量略有不同,我想要一个嵌套字典,其中键是日期列表,值是字典。但是,我不确定如何解决这个问题。任何帮助表示赞赏。如果之前有人问过这个问题,我很抱歉,因为我找不到任何参考资料。

标签: pythondictionary

解决方案


您可以在 for 循环的范围内定义 a :

import collections

b= collections.defaultdict(collections.defaultdict)
for i in range(0,3):
    a={1:[None,None], 2:[None,None]}
    if i == 1:
        a[1] = [2,3]
    if i == 2:
        a[1] = [1,1]
    b[i] = a

print(b)

输出:

defaultdict(<class 'collections.defaultdict'>,
{0: {1: [None, None], 2: [None, None]},
 1: {1: [2, 3], 2: [None, None]},
 2: {1: [1, 1], 2: [None, None]}})

这是您的预期行为吗?


推荐阅读