在 for 循环中创建嵌套字典

时间:2021-05-21 19:00:56

标签: python dictionary

我正在尝试创建一个嵌套字典,但不明白我得到的输出。

我运行的代码是:

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])}}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

Foundationio_dict['a'] 这两个字典都来自同一个字典,所以当你更新上述两个字典时,它从后端更新相同,所以你得到这样的的错误。考虑编译器,因为您已将 io_dict['b'] 分配给 channel_dictio_dict['a'],因此这两个用作引用相同内存位置的快捷方式,并且在您更新时然后两者都会更新。

但如果我们改用 io_dict['b']io_dict['a'] = channel_dict.copy(),那么编译器将为您的两个字典占用不同的内存位置,这将满足您的要求。

您完成的代码将是,

io_dict['b'] = channel_dict.copy()