Ajouter des éléments à un dictionnaire et joindre des dictionnaires en Python

Affaires

Cette section explique comment ajouter de nouveaux éléments à un dictionnaire (objet de type dict) ou mettre à jour la valeur d'un élément existant en Python. Il est également possible de concaténer (joindre, fusionner) plusieurs dictionnaires.

  • Ajouter et mettre à jour des éléments au dictionnaire en spécifiant des clés.
  • Concaténation (fusion) de plusieurs dictionnaires : update(),| operator,|= operator
  • Ajout ou mise à jour d'éléments multiples:update(),|= opérateur

Ajouter et mettre à jour des éléments au dictionnaire en spécifiant des clés.

Vous pouvez ajouter des éléments de dictionnaire de la manière suivante.

Objet du dictionnaire [clé] = valeur

Lorsqu'une clé inexistante est spécifiée, un nouvel élément est ajouté, et lorsqu'une clé existante est spécifiée, la valeur existante est mise à jour (écrasée).

d = {'k1': 1, 'k2': 2}

d['k3'] = 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}

d['k1'] = 100
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3}

Si vous ne souhaitez pas mettre à jour la valeur d'une clé existante, utilisez la méthode setdefault().

Concaténer (fusionner) plusieurs dictionnaires : update(), | operator, |= operator

mise à jour()

Si un autre objet du dictionnaire est spécifié comme argument à la méthode update() de l'objet du dictionnaire, tous ses éléments seront ajoutés.

Si la clé chevauche une clé existante, elle sera écrasée avec la valeur du dictionnaire spécifiée dans l'argument.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

d1.update(d2)
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

C'est une erreur de spécifier plusieurs dictionnaires dans l'argument update().

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

# d1.update(d2, d3)
# TypeError: update expected at most 1 arguments, got 2

Comme expliqué plus loin, update() peut ajouter de nouveaux éléments comme arguments de mot-clé (clé=valeur), il suffit donc d'ajouter ** au dictionnaire et de développer chaque élément comme argument de mot-clé et de le passer.

d1.update(**d2, **d3)
print(d1)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

Comme dans les exemples précédents, l'utilisation de update() mettra à jour l'objet original du dictionnaire.

Si vous souhaitez générer un nouveau dictionnaire en fusionnant plusieurs dictionnaires, utilisez {**d1, **d2}. (de Python 3.5) ou dict(**d1, **d2).

En Python 3.9 et plus, il est également possible de créer un nouveau dictionnaire en utilisant l'opérateur| décrit ci-après.

|= opérateur, |= opérateur (Python 3.9 et supérieur)

Depuis Python 3.9, il est possible de fusionner deux dictionnaires en utilisant l'opérateur |. Lorsque deux dictionnaires ont la même clé, la valeur de droite est prioritaire.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

print(d1 | d2)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

print(d2 | d1)
# {'k1': 1, 'k3': 3, 'k4': 4, 'k2': 2}

| Il est également possible de combiner plusieurs dictionnaires en utilisant une série d'opérateurs.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

print(d1 | d2 | d3)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

+Comme avec update(), l'objet de gauche est mis à jour.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

d1 |= d2
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Ajout ou mise à jour d'éléments multiples : update(), |= opérateur

mise à jour()

Lorsque le mot-clé argument key=value est spécifié dans la méthode update(), la clé et la valeur de la clé seront ajoutées. Si la clé chevauche une clé existante, elle sera écrasée par la valeur spécifiée dans l'argument.

d = {'k1': 1, 'k2': 2}

d.update(k1=100, k3=3, k4=4)
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Il est également possible de spécifier une liste de (clé, valeur) comme argument de la méthode update(). Si la clé chevauche une clé existante, elle sera écrasée par la valeur spécifiée comme argument.

d = {'k1': 1, 'k2': 2}

d.update([('k1', 100), ('k3', 3), ('k4', 4)])
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

En combinaison avec la fonction zip(), des éléments peuvent être ajoutés à partir d'une liste de clés et d'une liste de valeurs.

d = {'k1': 1, 'k2': 2}

keys = ['k1', 'k3', 'k4']
values = [100, 3, 4]

d.update(zip(keys, values))
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

|= opérateur (Python 3.9 et supérieur)

Avec l'opérateur |=, une liste de (clé, valeur) peut être spécifiée sur le côté droit.

d = {'k1': 1, 'k2': 2}

d |= [('k1', 100), ('k3', 3), ('k4', 4)]
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Notez que le fait de spécifier une liste avec l'opérateur | entraînera une erreur. Seules les opérations de dictionnaire à dictionnaire sont prises en charge.

# print(d | [('k1', 100), ('k3', 3), ('k4', 4)])
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'