Python合并字典

示例

考虑以下字典:

>>> fish = {'name': "Nemo", 'hands': "fins", 'special': "gills"}
>>> dog = {'name': "Clifford", 'hands': "paws", 'color': "red"}

Python 3.5+

>>> fishdog = {**fish, **dog}
>>> fishdog
{'hands': 'paws', 'color': 'red', 'name': 'Clifford', 'special': 'gills'}

如本示例所示,重复的键映射到它们的最后一个值(例如,“ Clifford”覆盖“ Nemo”)。


Python 3.3以上

>>> from collections import ChainMap
>>> dict(ChainMap(fish, dog))
{'hands': 'fins', 'color': 'red', 'special': 'gills', 'name': 'Nemo'}

使用此技术,给定键的最前值优先,而不是最后一个(“ Clifford”被抛弃,取而代之的是“ Nemo”)。


Python 2.x,3.x

>>> from itertools import chain
>>> dict(chain(fish.items(), dog.items()))
{'hands': 'paws', 'color': 'red', 'name': 'Clifford', 'special': 'gills'}

与**基于-的合并技术一样,它使用后一个值(“ Clifford”覆盖“ Nemo”)。

>>> fish.update(dog)
>>> fish
{'color': 'red', 'hands': 'paws', 'name': 'Clifford', 'special': 'gills'}

dict.update 使用后一个字典覆盖前一个字典。