正在将传递给有序字典创建的列表理解作为参考

时间:2019-10-14 20:58:44

标签: python python-3.x list dictionary ordereddictionary

我正在尝试为给定的键集创建有序的dic。 我想要的结构是`

     OrderedDict([('A', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 
                  ('B', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 
                  ('C', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 
                  ('D', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])])`

这是通过以下功能创建的。

  

d = OrderedDict.fromkeys(键,[0表示范围(10)中的_]]

我已成功获取所需的结构。

问题是所有dict的值都被创建为引用。我尝试执行以下d['A'][1] = "11111"时的含义 它更改了每个给定键的值。 我得到如下结果。

    OrderedDict([('A', [0, '11111', 0, 0, 0, 0, 0, 0, 0, 0]), 
                 ('B', [0, '11111', 0, 0, 0, 0, 0, 0, 0, 0]), 
                 ('C', [0, '11111', 0, 0, 0, 0, 0, 0, 0, 0]), 
                 ('D', [0, '11111', 0, 0, 0, 0, 0, 0, 0, 0])])

我确实尝试过Deepcopy,但并没有真正帮助。 我目前的工作是

d['A'] = d['A'][:]

我真的不喜欢上述解决方案,因为我大约有6mil keys and values ..因此这样做有点麻烦。

我想知道一种更好的方法,以及为什么会这样。

1 个答案:

答案 0 :(得分:2)

类方法fromkeys对所有字典键都使用相同默认值。

为避免这种情况,请为每个键指定一个新实例:

d = OrderedDict((k, [0]*10) for k in keys)