将字典追加到字典中

563 投票
7 回答
1014704 浏览
提问于 2025-04-17 10:38

我有两个已经存在的字典,我想把其中一个“添加”到另一个字典里。我的意思是,把另一个字典里的键和值都放到第一个字典里。比如:

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循环来实现(可能吧?),但是有没有什么字典的方法或者其他模块可以帮我省去这个麻烦?因为我用的字典真的很大……

7 个回答

34

dict.update() 看起来可以满足你的需求...

>> orig.update(extra)
>>> orig
{'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4}
>>> 

不过,也许你并不想直接修改原来的字典,而是想在一个副本上进行操作:

>>> dest = orig.copy()
>>> dest.update(extra)
>>> orig
{'A': 1, 'C': 3, 'B': 2}
>>> dest
{'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4}
188

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

更新(直接修改原来的字典 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),字典是有顺序的。所以在之前的版本中,字典里的项目顺序可能会不一样。

792

你可以这样做:

orig.update(extra)

或者,如果你不想让 orig 被修改,先复制一份:

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

注意,如果 extraorig 有重叠的键,最终的值会取自 extra。比如:

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

撰写回答