Python Language Fusion de dictionnaires


Exemple

Considérons les dictionnaires suivants:

>>> 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'}

Comme le montre cet exemple, les clés en double correspondent à leur valeur la plus récente (par exemple, "Clifford" remplace "Nemo").


Python 3.3+

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

Avec cette technique, la valeur la plus importante prime sur une clé donnée plutôt que sur la dernière ("Clifford" est rejeté en faveur de "Nemo").


Python 2.x, 3.x

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

Cela utilise la dernière valeur, comme avec la technique basée sur ** pour la fusion ("Clifford" remplace "Nemo").

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

dict.update utilise le dernier dict pour écraser le précédent.