我正在尝试创建一个嵌套字典,但不明白我得到的输出。
我运行的代码是:
import numpy as np
io_dict = dict.fromkeys(['a', 'b'])
channel_dict = dict.fromkeys(['ch1', 'ch2'])
io_dict['a'] = channel_dict
io_dict['b'] = channel_dict
for channel in channel_dict.keys():
io_dict['a'][channel] = np.array([1,2,3])
io_dict['b'][channel] = np.array([5,6,7])
io_dict
这会产生输出:
{'a': {'ch1': array([5, 6, 7]), 'ch2': array([5, 6, 7])},
'b': {'ch1': array([5, 6, 7]), 'ch2': array([5, 6, 7])}}
然而,我期待:
{'a': {'ch1': array([1, 2, 3]), 'ch2': array([1, 2, 3])},
'b': {'ch1': array([5, 6, 7]), 'ch2': array([5, 6, 7])}}
任何帮助将不胜感激。
答案 0 :(得分:1)
Foundation
和 io_dict['a']
这两个字典都来自同一个字典,所以当你更新上述两个字典时,它从后端更新相同,所以你得到这样的的错误。考虑编译器,因为您已将 io_dict['b']
分配给 channel_dict
和 io_dict['a']
,因此这两个用作引用相同内存位置的快捷方式,并且在您更新时然后两者都会更新。
但如果我们改用 io_dict['b']
和 io_dict['a'] = channel_dict.copy()
,那么编译器将为您的两个字典占用不同的内存位置,这将满足您的要求。
您完成的代码将是,
io_dict['b'] = channel_dict.copy()