Como otros han mencionado, a.update(b)para algunos dictados ay blogrará el resultado que ha pedido en su pregunta. Sin embargo, quiero señalar que muchas veces he visto que el extendmétodo de mapear / establecer objetos desea que en la sintaxis a.extend(b), alos valores de NO se sobrescriban con blos valores de. a.update(b)sobrescribe alos valores, por lo que no es una buena opción paraextend .
Tenga en cuenta que algunos idiomas llaman a este método defaultsoinject , ya que puede considerarse como una forma de inyectar los valores de b (que podrían ser un conjunto de valores predeterminados) en un diccionario sin sobrescribir los valores que ya podrían existir.
Por supuesto, podrías notar que a.extend(b)es casi lo mismo que b.update(a); a=b. Para eliminar la asignación, puede hacerlo así:
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)
Gracias a Tom Leys por esa idea inteligente usando un dictconstructor sin efectos secundarios extend.