python - 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”的值更新,它就会更新字典中所有键的引用。
我的用例是变量略有不同,我想要一个嵌套字典,其中键是日期列表,值是字典。但是,我不确定如何解决这个问题。任何帮助表示赞赏。如果之前有人问过这个问题,我很抱歉,因为我找不到任何参考资料。
解决方案
您可以在 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]}})
这是您的预期行为吗?
推荐阅读
- php - Apache NetBeans 12.3 和 XAMPP 3.2.4 PHP 断点 Windows 10
- tcl - 如何在 TCL 中使用带有查询结果的 if 语句?
- java - 访问数组中子类的字段
- python-3.x - 如何使用 kubernetes python 客户端获取像 VirtualMachine 这样的自定义对象?
- datatables - DataTables 的 TreeGrid 扩展 - 如何在名称后添加复选框?
- linux - 在 eth1 和 tun0 之间建立一个“桥梁”
- azure - 逻辑应用在执行后以等待状态运行
- mysql - 要填写的预定义日期范围
- steganography - 停留在 png 中的基本图像隐写术(关于做什么的更多建议)
- android - 仅返回类型不同的函数不能重载