Jak wspominają inni, a.update(b)
dla niektórych dicts a
i b
osiągnie wynik masz hasła w swoim pytaniu. Jednakże chcę zauważyć, że wielokrotnie widziałem metodę mapowania/ustawiania obiektów, która wymaga, aby w wartościach składni NIE były nadpisywane wartościami b
. a.update(b)
zastępuje wartości a
, więc nie jest dobrym wyborem dla extend
.
Należy pamiętać, że niektóre języki nazywają tę metodę defaults
lub inject
, ponieważ można ją traktować jako sposób wstrzykiwania wartości b (które mogą być zestawem wartości domyślnych) do słownika bez nadpisywania wartości, które mogą już istnieć.
Oczywiście można łatwo zauważyć, że a.extend(b)
jest prawie taki sam jak b.update(a); a=b
.Aby usunąć zadanie, można 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 Tom Leys dla tej idei inteligentnej za pomocą efektem ubocznym mniej dict
konstruktora dla extend
.
Wiedziałem, że dla list [], to supose może być pracą dla innych, nie wymagać od ciebie ;-) – FerranB