Comme d'autres l'ont mentionné, a.update(b)
pour certains mourants a
, vous b
obtiendrez le résultat que vous avez demandé dans votre question. Cependant, je tiens à souligner que de nombreuses fois, j'ai vu la extend
méthode de mappage / définition d'objets désirer que dans la syntaxe a.extend(b)
, a
les valeurs de '' NE soient PAS écrasées par b
les valeurs de ''. a.update(b)
écrase a
les valeurs de, et n'est donc pas un bon choix pour extend
.
Notez que certaines langues appellent cette méthode defaults
ou 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 dict
constructeur sans effet secondaire pour extend
.