J'ai deux dictionnaires et j'aimerais pouvoir en faire un seul :
Quelque chose comme ce pseudo-Python serait bien :
dic0 = {'dic0': 0}
dic1 = {'dic1': 1}
ndic = dic0 + dic1
# ndic would equal {'dic0': 0, 'dic1': 1}
J'ai deux dictionnaires et j'aimerais pouvoir en faire un seul :
Quelque chose comme ce pseudo-Python serait bien :
dic0 = {'dic0': 0}
dic1 = {'dic1': 1}
ndic = dic0 + dic1
# ndic would equal {'dic0': 0, 'dic1': 1}
Notez que la syntaxe équivalente dans Python 3.x est la suivante ndic = list(dict(dic0.items()) + list(dic1.items()))
depuis .items()
ne renvoie plus une liste, mais une vue (itérable)
@BryceGuinta je suppose que vous vouliez dire ndic = dict(list(dic0.items()) + list(dic1.items()))
@dimo414 Oui, c'est ma faute. Je ne peux cependant pas le changer maintenant. J'utilise Carte de la chaîne de collections
pour réaliser cette fonctionnalité maintenant via dict(ChainMap(dic1, dic0))
. Cependant, j'ai dû récupérer le code source à partir de le paquet pypi de chainmap pour Python2.7. Remarquez comment j'ai interverti l'ordre des dicts. Dans l'exemple de Vijay, les valeurs des clés les plus à droite écrasent les plus à gauche, alors que ChainMap a raison et les valeurs des clés les plus à gauche ont la priorité sur celles de droite.
Vous êtes à la recherche de la méthode de mise à jour
dic0.update( dic1 )
print( dic0 )
donne
{'dic0': 0, 'dic1': 1}
La façon la plus simple de le faire est d'utiliser simplement votre code d'exemple, mais en utilisant le membre items() de chaque dictionnaire. Ainsi, le code serait le suivant
dic0 = {'dic0': 0}
dic1 = {'dic1': 1}
dic2 = dict(dic0.items() + dic1.items())
Je l'ai testé dans IDLE et cela fonctionne bien. Cependant, la question précédente sur ce sujet indique que cette méthode est lente et consomme de la mémoire. Il y a plusieurs autres méthodes recommandées, alors consultez-les si l'utilisation de la mémoire est importante.
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.
6 votes
J'aimerais savoir pourquoi Python ne le permet pas. Il me semble logique qu'il effectue une opération non-commutative qui donne lieu à une nouvelle instance de dict. Mais je rate probablement quelque chose d'évident...
1 votes
@Sam Problème possible : {'dic0':0} + {'dic0':1}. Que faire ?
3 votes
@palsch {'dic0':0} + {'dic0':1} devrait être équivalent à d={'dic0':0} ; d.update({'dic0':1}) ?
1 votes
Votre syntaxe avec l'opérateur + est prise en charge depuis Python 3.9, conformément à la PEP 584