为了账号安全,请及时绑定邮箱和手机立即绑定

传递给 Ordered Dict 创建的列表理解被创建为参考

传递给 Ordered Dict 创建的列表理解被创建为参考

HUX布斯 2022-06-22 18:09:53
我正在尝试为给定的一组键创建一个有序的 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.. 所以这样做有点麻烦。我想知道这样做的更好方法..以及为什么会这样。
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

classmethod对所有字典键fromkeys使用相同的默认值。

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

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


查看完整回答
反对 回复 2022-06-22
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信