Jak wspomnieli inni, a.update(b)dla niektórych dykt ai bosiągną wynik, o który prosiłeś w swoim pytaniu. Chcę jednak podkreślić, że wiele razy widziałem extendmetodę mapowania / zestaw przedmiotów, które pragną w składni a.extend(b), a„s wartości nie powinny być zastąpione przez b” s wartości. a.update(b)nadpisuje awartości, więc nie jest to dobry wybór extend.
Zauważ, że niektóre języki wywołują tę metodę defaultslub inject, jak można ją traktować, jako sposób na wstrzyknięcie wartości b (które mogą być zestawem wartości domyślnych) do słownika bez nadpisywania wartości, które już mogą istnieć.
Oczywiście możesz zauważyć prostą notatkę, która a.extend(b)jest prawie taka sama jak b.update(a); a=b. Aby usunąć zadanie, możesz to zrobić w następujący sposób:
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)
Dzięki Tomowi Leysowi za ten sprytny pomysł wykorzystujący konstruktor bez efektów ubocznych dictdla extend.