传递给 Ordered Dict 创建的列表理解被创建为参考
List comprehension being passed to Ordered Dict creation is being created as a reference
我正在尝试为给定的一组键创建一个有序的 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(keys, [0 for _ in range(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
.. 所以这样做有点麻烦。
我想知道更好的方法..以及为什么会这样。
类方法 fromkeys
对所有字典键使用 相同 默认值。
为避免这种情况,请为每个键指定一个新实例:
d = OrderedDict((k, [0]*10) for k in keys)
我正在尝试为给定的一组键创建一个有序的 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(keys, [0 for _ in range(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
.. 所以这样做有点麻烦。
我想知道更好的方法..以及为什么会这样。
类方法 fromkeys
对所有字典键使用 相同 默认值。
为避免这种情况,请为每个键指定一个新实例:
d = OrderedDict((k, [0]*10) for k in keys)