Fusion et mise à jour de dictionnaires en Python 3.9 – Meilleure programmation

Online Coding Courses for Kids

Parfois, nous devons fusionner deux dictionnaires pour un traitement ultérieur. Avant la version officielle de la version 3.9, nous pouvons procéder de plusieurs manières. Supposons que nous en ayons deux dicts: d1 et d2. Nous voulons créer un nouveau dict appelé d3, une union de d1 et d2. Pour illustrer ce que nous ferons s’il y a des clés qui se chevauchent entre la fusion dicts, nous avons un autre dict d2a, dont la clé se chevauche avec d1.

# two dicts to start with
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
d2a = {'a': 10, 'c': 3, 'd': 4}
# target dict
d3 = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

Utilisation de la méthode update ()

La première consiste à utiliser le dictMéthode update(). L’extrait de code suivant vous montre comment procéder. Notez que nous devrons créer une copie de d1 d’abord, comme update() la fonction modifiera l’original dict.

# create a copy of d1, as update() modifies the dict in-place
d3 = d1.copy()
# d3 is {'a': 1, 'b': 2}
# update the d3 with d2
d3.update(d2)
# d3 now is {'a': 1, 'b': 2, 'c': 3, 'd': 4}

Lorsqu’il y a des clés qui se chevauchent, nous devons être plus prudents quant aux valeurs à conserver. Comme vous pouvez le voir ci-dessous, dict qui est passé comme argument dans le update() “gagnera” le jeu en ayant la valeur (c’est-à-dire 10) pour la clé qui se chevauchent (c’est-à-dire, ‘a’).

d3 = d1.copy()
d3.update(d2a)
# d3 now is {'a': 10, 'b': 2, 'c': 3, 'd': 4}
# This is not the way that we want
d3 = d2a.copy()
d3.update(d1)
# d3 now is {'a': 1, 'c': 3, 'd': 4, 'b': 2}
# This is the way that we want

Déballage des dictionnaires

La deuxième façon consiste à utiliser le déballage des dictionnaires. De la même manière que la méthode ci-dessus, «la dernière fois gagne» lorsqu’il y a des clés qui se chevauchent.

# unpacking
d3 = {**d1, **d2}
# d3 is {'a': 10, 'b': 2, 'c': 3, 'd': 4}
# Not right
d3 = {**d2a, **d1}
# d3 is {'a': 1, 'c': 3, 'd': 4, 'b': 2}
# Good

En utilisant dicter(itérable, ** kwarg)

Une façon de créer un dict en Python est d’utiliser le dict(iterable, **kwarg) méthode. Le sujet actuel est particulièrement pertinent: lorsque le iterable est un dict, un nouveau dict sera créé avec les mêmes paires clé-valeur. Pour les arguments de mot-clé, nous pouvons passer un autre dict de telle sorte qu’il ajoutera les paires clé-valeur à la dict cela va créer. Notez que cet argument de mot clé dict remplacera la valeur par la même clé – quelque chose comme «la dernière victoire remportée». Veuillez voir ci-dessous pour un exemple.

d3 = dict(d1, **d2)
# d3 is {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# Good, it's what we want
d3 = dict(d1, **d2a)
# d3 is {'a': 10, 'b': 2, 'c': 3, 'd': 4}
# Not right, 'a' value got replaced

Une chose à noter est que cette méthode ne fonctionne que lorsque l’argument mot-clé dict a des chaînes comme clés. Comme ci-dessous, un dict en utilisant un int car sa clé ne fonctionnera pas.

>>> dict({'a': 1}, **{2: 3})
Traceback (most recent call last):
File "", line 1, in
TypeError: keywords must be strings
>>> dict({'a': 1}, **{'2': 3})
{'a': 1, '2': 3}

Close Menu