Jak wspomnieli inni, a.update(b)
dla niektórych dykt a
i b
osiągną wynik, o który prosiłeś w swoim pytaniu. Chcę jednak podkreślić, że wiele razy widziałem extend
metodę 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 a
wartości, więc nie jest to dobry wybór extend
.
Zauważ, że niektóre języki wywołują tę metodę defaults
lub 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 dict
dla extend
.