将字典追加到字典中
我有两个已经存在的字典,我想把其中一个“添加”到另一个字典里。我的意思是,把另一个字典里的键和值都放到第一个字典里。比如:
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)
注意,如果 extra
和 orig
有重叠的键,最终的值会取自 extra
。比如:
>>> d1 = {1: 1, 2: 2}
>>> d2 = {2: 'ha!', 3: 3}
>>> d1.update(d2)
>>> d1
{1: 1, 2: 'ha!', 3: 3}