92 votes

Comment fusionner des dictionnaires en Python ?

d3 = dict(d1, **d2)

Je comprends que cela fusionne le dictionnaire. Mais, est-il unique ? Que se passe-t-il si d1 a la même clé que d2 mais une valeur différente ? Je voudrais que d1 et d2 soient fusionnés, mais que d1 ait la priorité s'il y a un doublon de clé.

9 votes

Veuillez noter que cette astuce est considérée comme un abus de pouvoir. ** le passage de l'argument mot-clé à moins que toutes les clés de d2 sont des cordes. Si toutes les clés de d2 sont des chaînes de caractères, cela échoue dans Python 3.2, et dans les implémentations alternatives de Python comme Jython, IronPython et PyPy. Voir, par exemple, mail.python.org/pipermail/python-dev/2010-avril/099459.html .

2 votes

1voto

pfctdayelise Points 1736

Trey Hunner a publié un article sur son blog décrivant plusieurs options pour fusionner plusieurs dictionnaires, notamment (pour python3.3+) Carte de la chaîne y déballage du dictionnaire .

0voto

Olivier Melançon Points 15762

Je pense que, comme indiqué ci-dessus, l'utilisation d2.update(d1) est la meilleure approche et que vous pouvez aussi copier d2 d'abord si vous en avez encore besoin.

Bien que, je tiens à souligner que dict(d1, **d2) est en fait une mauvaise façon de fusionner des dictionnaires en général, car les arguments des mots-clés doivent être des chaînes de caractères, ce qui fait qu'elle échouera si vous avez un fichier dict comme :

{
  1: 'foo',
  2: 'bar'
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X