Comme d'autres l'ont mentionné, a.update(b)
pour certains dicts a
y b
permettra d'atteindre le résultat que vous avez demandé dans votre question. Toutefois, je tiens à souligner que j'ai souvent vu les extend
La méthode de mappage/réglage des objets désire que dans la syntaxe a.extend(b)
, a
ne doivent PAS être écrasées par les valeurs de l'option b
Les valeurs de l'UE. a.update(b)
écrase a
et n'est donc pas un bon choix pour les valeurs de la extend
.
Notez que certaines langues appellent cette méthode defaults
o inject
car il peut être considéré comme un moyen d'injecter les valeurs de b (qui peuvent être un ensemble de valeurs par défaut) dans un dictionnaire sans écraser les valeurs qui peuvent déjà exister.
Bien sûr, vous pouvez simplement noter que a.extend(b)
est presque identique à b.update(a); a=b
. Pour supprimer l'affectation, vous pouvez procéder ainsi :
def extend(a,b):
"""Create a new dictionary with a's properties extended by b,
without overwriting.
>>> extend({'a':1,'b':2},{'b':3,'c':4})
{'a': 1, 'c': 4, 'b': 2}
"""
return dict(b,**a)
Merci à Tom Leys pour cette idée intelligente d'utiliser une méthode sans effet secondaire. dict
constructeur pour extend
.
25 votes
Je savais que pour les listes [], alors je suppose que peut être le travail pour d'autres, pas extrange ;-)
0 votes
Cette question n'est pas définie de manière unique, car l'exemple doit couvrir le cas où a et b ont des clés communes.