Comme d'autres l'ont mentionné, a.update(b)pour certains mourants a, vous bobtiendrez le résultat que vous avez demandé dans votre question. Cependant, je tiens à souligner que de nombreuses fois, j'ai vu la extendméthode de mappage / définition d'objets désirer que dans la syntaxe a.extend(b), ales valeurs de '' NE soient PAS écrasées par bles valeurs de ''. a.update(b)écrase ales valeurs de, et n'est donc pas un bon choix pour extend.
Notez que certaines langues appellent cette méthode defaultsou inject, comme cela peut être considéré comme un moyen d'injecter les valeurs de b (qui pourraient être un ensemble de valeurs par défaut) dans un dictionnaire sans écraser les valeurs qui pourraient déjà exister.
Bien sûr, vous pouvez simplement noter que a.extend(b)c'est presque la même chose que b.update(a); a=b. Pour supprimer l'affectation, vous pouvez le faire 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 en utilisant un dictconstructeur sans effet secondaire pour extend.