Como outros já mencionaram, a.update(b)para alguns ditados ae balcançarão o resultado solicitado em sua pergunta. No entanto, quero ressaltar que muitas vezes vi o extendmétodo de mapear / definir objetos que, na sintaxe a.extend(b), aos valores de NÃO devem ser substituídos pelos bvalores de. a.update(b)sobrescreve aos valores e, portanto, não é uma boa opção paraextend .
Observe que alguns idiomas chamam esse método defaultsouinject , como pode ser considerado como uma maneira de injetar os valores de b (que podem ser um conjunto de valores padrão) em um dicionário sem substituir os valores que já possam existir.
Obviamente, você pode observar que a.extend(b)é quase o mesmo que b.update(a); a=b. Para remover a atribuição, você pode fazer o seguinte:
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)
Agradecemos a Tom Leys pela ideia inteligente de usar um dictconstrutor sem efeitos colaterais extend.