Comment fusionner deux dictionnaires Python

Dans un précédent tutoriel, nous avons découvert les dictionnaires Python et constaté qu’ils sont considérés comme des ensembles non ordonnés avec un valeur clé paire, où clés sont utilisés pour accéder aux éléments par opposition à la position, comme dans les listes par exemple.

Dans cette astuce, je vais vous montrer comment concaténer (fusionner) deux dictionnaires.

La méthode Update ()

Disons que nous avons les deux dictionnaires suivants:

dict1 = 'bookA': 1, 'bookB': 2, 'bookC': 3 dict2 = 'bookC': 2, 'bookD': 4, 'bookE': 5

Comment pouvons-nous fusionner ces deux dictionnaires dans un seul dictionnaire? Une fonction que nous pouvons utiliser à cet égard est mise à jour ([autre]). Comme indiqué dans la documentation Python:

Mettre à jour le dictionnaire avec les paires clé / valeur de autre, écraser les clés existantes. Revenir Aucun.
mettre à jour() accepte soit un autre objet dictionnaire, soit un itérable de paires clé / valeur (en tant que tuples ou autres itérables de longueur deux). Si des arguments de mots clés sont spécifiés, le dictionnaire est ensuite mis à jour avec les paires clé / valeur suivantes: d.update (rouge = 1, bleu = 2).

Ainsi, pour fusionner les deux dictionnaires ci-dessus, nous pouvons taper les éléments suivants:

dict2.update (dict1)

Supposons que vous ayez tapé la déclaration suivante afin d’afficher les résultats:

print dict2.update (dict1)

Dans ce cas, vous aurez Aucun! C'est parce que le mettre à jour() fonction ne renvoie pas un nouveau dictionnaire. Pour obtenir le résultat de la concaténation, tapez simplement le texte suivant:

imprimer dict2

Dans ce cas, vous obtiendrez le résultat suivant:

'bookA': 1, 'bookB': 2, 'bookC': 3, 'bookD': 4, 'bookE': 5

Et si on faisait ce qui suit?

dict1.update (dict2) print dict1

Dans ce cas, vous obtiendrez le résultat suivant:

'bookA': 1, 'bookB': 2, 'bookC': 2, 'bookD': 4, 'bookE': 5

Notez que dans le premier cas, dict2.update (dict1), nous mettons à jour le dictionnaire dict2 avec les paires clé / valeur de dict1, et écraser toutes les clés existantes. La clé existante que nous pouvons remarquer est 'bookC', qui aura la valeur 3 dans ce cas, puisque nous mettons à jour les paires clé / valeur de dict1. Cela sera inversé dans le dernier cas, dict1.update (dict2), où nous mettons à jour le dictionnaire dict1 avec des paires clé / valeur de dict2.

Cependant, il y a un problème à utiliser mettre à jour() fusionner deux dictionnaires. Le problème réside dans le fait que le dictionnaire d'origine peut être modifié. En d'autres termes, dans le premier cas par exemple, dict2.update (dict1), la version originale de dict2 pourrait être modifié, et dans ce dernier cas, dict1.update (dict2), la version originale de dict1 pourrait être modifié. C'est-à-dire que vous pouvez utiliser mettre à jour() pour fusionner deux dictionnaires si vous ne souhaitez pas conserver la version originale du dictionnaire à mettre à jour. Par la version originale, je veux dire conserver la valeur de la clé.

Fusion de deux dictionnaires dans une seule expression

Une autre méthode que vous pouvez utiliser pour fusionner deux dictionnaires, dans laquelle vous pouvez effectuer une telle tâche dans une seule expression, est la suivante:

print dict (dict2, ** dict1)

Le résultat de cette instruction est:

'bookA': 1, 'bookB': 2, 'bookC': 3, 'bookD': 4, 'bookE': 5

Ainsi, dict1 annule dict2. Si nous voulons dict2 pour remplacer dict1, on tape:

print dict (dict1, ** dict2)

La sortie dans ce cas serait:

'bookA': 1, 'bookB': 2, 'bookC': 2, 'bookD': 4, 'bookE': 5

Conserver les valeurs clés 

Pour revenir à la question précédente de la conservation des valeurs de clé, comment pouvons-nous fusionner deux dictionnaires tout en conservant les originaux de chaque dictionnaire??

Une solution de contournement pour cela peut être la suivante (tirée de la réponse dans ce fil StackOverflow):

from itertools chaîne d'importation de collections defaultdict dict1 = 'bookA': 1, 'bookB': 2, 'bookC': 3 dict2 = 'bookC': 2, 'bookD': 4, 'bookE': 5 dict3 = defaultdict (liste) pour k, v dans la chaîne (dict1.items (), dict2.items ()): dict3 [k] .append (v) pour k, v dans dict3.items (): print (k, v)

La sortie dans ce cas sera:

('bookA', [1]) ('bookB', [2]) ('bookC', [3, 2]) ('bookD', [4]) ('bookE', [5])

Ainsi, comme vous pouvez le constater dans cette astuce, il est très facile de fusionner deux dictionnaires en utilisant Python, et cela devient un peu plus complexe si nous voulons conserver les valeurs de la même clé dans chaque dictionnaire..

Apprendre le python

Apprenez Python avec notre guide complet de tutoriel sur Python, que vous soyez débutant ou que vous soyez un codeur chevronné cherchant à acquérir de nouvelles compétences..