Python使用for循环创建嵌套字典输出不符合预期问题求助
问题原因
Python中的字典属于可变引用类型,你代码中将io_dict['a']和io_dict['b']都赋值为同一个channel_dict对象,本质上这两个键指向的是内存中完全相同的字典地址。后续循环中不管修改哪一个键下的通道值,都是对同一个字典做修改,后面写入的[5,6,7]会直接覆盖之前写入的[1,2,3],最终两个键对应的字典内容完全一致。
修复方案
每次给io_dict的键赋值时,创建独立的通道字典即可,参考修正后的代码:
import numpy as np io_dict = dict.fromkeys(['a', 'b']) # 给a和b分别赋值独立的字典,不要共用同一个对象 io_dict['a'] = dict.fromkeys(['ch1', 'ch2']) io_dict['b'] = dict.fromkeys(['ch1', 'ch2']) for channel in io_dict['a'].keys(): io_dict['a'][channel] = np.array([1,2,3]) io_dict['b'][channel] = np.array([5,6,7]) print(io_dict)
如果你的channel_dict是提前定义好包含初始值的,也可以调用copy()方法创建独立副本,避免引用共用:
channel_dict = dict.fromkeys(['ch1', 'ch2']) io_dict['a'] = channel_dict.copy() io_dict['b'] = channel_dict.copy()
运行后即可得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者Ian Gullett
相关产品推荐
相关产品推荐

