Skip to content

Fusionner plusieurs dictionnaires et ajouter des éléments à un dictionnaire en Python

Cet article explique comment ajouter un nouvel élément à un dictionnaire dict ou mettre à jour la valeur d’un élément existant en Python. Il est également possible de fusionner plusieurs dictionnaires.

  • Ajouter/mettre à jour un élément dans/dans le dictionnaire en spécifiant une clé
  • Fusionnez plusieurs dictionnaires :update(), {}, dict(), |, |=
  • Ajouter/mettre à jour plusieurs éléments vers/dans le dictionnaire :update(), |=

Consultez les articles suivants pour savoir comment supprimer un élément d’un dictionnaire, vérifier l’existence d’une clé et modifier la clé.

Ajouter/mettre à jour un élément dans/dans le dictionnaire en spécifiant une clé

Vous pouvez ajouter un élément au dictionnaire ou mettre à jour la valeur d’un élément existant comme suit.

Si une clé inexistante est spécifiée, un nouvel élément est ajouté, et si une clé existante est spécifiée, la valeur de l’élément existant 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(). Voir l’article suivant.

Fusionnez plusieurs dictionnaires :update(), |, |=

mettre à jour()

En spécifiant un autre dict comme argument de la méthode update(), tous ses éléments sont ajoutés.

Si la clé chevauche une clé existante, elle est remplacée par la valeur de dict 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}

Une erreur est générée si plusieurs dictionnaires sont spécifiés comme argument de update().

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

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

Comme décrit plus tard, update() peut ajouter de nouveaux éléments avec des arguments de mots clés (key=value), vous pouvez donc décompresser et transmettre chaque élément avec **.

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

Dans ce cas, il est normal que les clés du dictionnaire qui appelle la méthode et les clés du dictionnaire spécifié dans l’argument soient dupliquées comme dans l’exemple ci-dessus, mais une erreur est levée si les clés de plusieurs dictionnaires spécifiés dans l’argument sont dupliqués.

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

# d3.update(**d1, **d2)
# TypeError: dict.update() got multiple values for keyword argument 'k1'

{} (Python 3.5 ou ultérieur), dict()

Avec update(), le dictionnaire d’origine est mis à jour.

Si vous souhaitez créer un nouveau dictionnaire en fusionnant plusieurs dictionnaires, utilisez {**d1, **d2} (à partir de Python 3.5) ou dict(**d1, **d2).

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

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

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

Dans le cas de dict(**d1, **d2), une erreur survient si les clés de plusieurs dictionnaires spécifiés comme arguments sont dupliquées.

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

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

# print(dict(**d1, **d2))
# TypeError: dict() got multiple values for keyword argument 'k1'

Consultez les articles suivants pour plus de détails sur la façon de créer un dictionnaire.

Dans Python 3.9 ou version ultérieure, il est également possible de créer un nouveau dictionnaire en utilisant le | opérateur décrit ensuite.

| opérateur, opérateur |= (Python 3.9 ou version ultérieure)

Depuis Python 3.9, il est possible de fusionner deux dictionnaires avec le | opérateur. S’ils ont la même clé, celle-ci est écrasée par la valeur de droite.

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

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

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

Vous pouvez combiner plusieurs dictionnaires.

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

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

Comme += pour +, |= pour | est également fourni. 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}

Ajouter/mettre à jour plusieurs éléments vers/dans le dictionnaire :update(), |=

mettre à jour()

Si l’argument de mot-clé key=value est spécifié dans la méthode update(), l’élément avec sa clé et sa valeur est ajouté. Si la clé chevauche une clé existante, elle est remplacé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}

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 est remplacé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}

Vous pouvez utiliser zip() pour ajouter des éléments à 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}

Voir l’article suivant sur zip().

Pour les arguments de mots clés, une erreur est générée si la même clé est spécifiée. Dans le cas des listes (clé, valeur) et zip(), les clés en double sont acceptables. Elle est écrasée par la dernière valeur.

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

# d.update(k3=3, k3=300)
# SyntaxError: keyword argument repeated: k3

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

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

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

keys = ['k3', 'k3']
values = [3, 300]

d.update(zip(keys, values))
print(d)
# {'k1': 1, 'k2': 2, 'k3': 300}

|= opérateur (Python 3.9 ou ultérieur)

L’opérateur |= permet de spécifier une liste de (clé, valeur) 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}

Le | L’opérateur ne prend en charge que les opérations entre dictionnaires. Vous ne pouvez pas spécifier une liste.

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