将字典附加到字典

新手上路,请多包涵

我有两个现有的词典,我希望将其中一个“附加”到另一个。我的意思是,其他字典的键值应放入第一个字典中。例如:

 orig = {
   'A': 1,
   'B': 2,
   'C': 3,
}

extra = {
   'D': 4,
   'E': 5,
}

dest = # Something here involving orig and extra

print dest
{
   'A': 1,
   'B': 2,
   'C': 3,
   'D': 4,
   'E': 5
}

我认为这一切都可以通过 for 循环(也许?)来实现,但是是否有某种字典方法或任何其他模块可以为我节省这项工作?我使用的实际词典真的很大……

原文由 Javier Novoa C. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 220
2 个回答

你可以做

orig.update(extra)

或者,如果您不想修改 orig ,请先复制一份:

 dest = dict(orig)  # or orig.copy()
dest.update(extra)

请注意,如果 extra 和 orig 具有重叠键,则最终值将从 extra 中获取。例如,

 >>> d1 = {1: 1, 2: 2}
>>> d2 = {2: 'ha!', 3: 3}
>>> d1.update(d2)
>>> d1
{1: 1, 2: 'ha!', 3: 3}

原文由 mipadi 发布,翻译遵循 CC BY-SA 3.0 许可协议

有两种方法可以将一个字典添加到另一个字典:

更新(修改 orig 到位)

 orig.update(extra)    # Python 2.7+
orig |= extra         # Python 3.9+

合并(创建一个新字典)

 # Python 2.7+
dest = collections.ChainMap(orig, extra)
dest = {k: v for d in (orig, extra) for (k, v) in d.items()}

# Python 3
dest = {**orig, **extra}
dest = {**orig, 'D': 4, 'E': 5}

# Python 3.9+
dest = orig | extra


注意事项

请注意,这些操作是不可交换的。在所有情况下, _后者都是赢家_。例如

orig  = {'A': 1, 'B': 2}
extra = {'A': 3, 'C': 3}

dest = orig | extra
# dest = {'A': 3, 'B': 2, 'C': 3}

dest = extra | orig
# dest = {'A': 1, 'B': 2, 'C': 3}

同样重要的是要注意,仅从 Python 3.7(和 CPython 3.6) dict 是有序的。因此,在以前的版本中,字典中项目的顺序可能会有所不同。

原文由 Nuno André 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题