Actualización de diccionarios nesteds cuando los datos tienen clave existente

Estoy tratando de actualizar los valores en un diccionario nested, sin sobrescribir las entradas anteriores cuando la clave ya existe. Por ejemplo, tengo un diccionario:

myDict = {} myDict["myKey"] = { "nestedDictKey1" : aValue } 

dando

  print myDict >> { "myKey" : { "nestedDictKey1" : aValue }} 

Ahora, quiero agregar otra entrada, debajo de "myKey"

 myDict["myKey"] = { "nestedDictKey2" : anotherValue }} 

Esto volverá:

 print myDict >> { "myKey" : { "nestedDictKey2" : anotherValue }} 

Pero yo quiero:

 print myDict >> { "myKey" : { "nestedDictKey1" : aValue , "nestedDictKey2" : anotherValue }} 

¿Hay alguna forma de actualizar o agregar "myKey" con nuevos valores, sin sobrescribir los anteriores?

Esta es una muy buena solución general para tratar con dicts nesteds :

 import collections def makehash(): return collections.defaultdict(makehash) 

Eso permite establecer claves anidadas en cualquier nivel:

 myDict = makehash() myDict["myKey"]["nestedDictKey1"] = aValue myDict["myKey"]["nestedDictKey2"] = anotherValue myDict["myKey"]["nestedDictKey3"]["furtherNestedDictKey"] = aThirdValue 

Para un solo nivel de anidamiento, defaultdict se puede usar directamente:

 from collections import defaultdict myDict = defaultdict(dict) myDict["myKey"]["nestedDictKey1"] = aValue myDict["myKey"]["nestedDictKey2"] = anotherValue 

Y aquí hay una manera de usar solo dict :

 try: myDict["myKey"]["nestedDictKey2"] = anotherValue except KeyError: myDict["myKey"] = {"nestedDictKey2": anotherValue} 

Puede usar collections.defaultdict para esto, y simplemente establecer los pares clave-valor dentro del diccionario nested.

 from collections import defaultdict my_dict = defaultdict(dict) my_dict['myKey']['nestedDictKey1'] = a_value my_dict['myKey']['nestedDictKey2'] = another_value 

Alternativamente, también puedes escribir esas últimas 2 líneas como

 my_dict['myKey'].update({"nestedDictKey1" : a_value }) my_dict['myKey'].update({"nestedDictKey2" : another_value }) 
 myDict["myKey"]["nestedDictKey2"] = anotherValue 

myDict["myKey"] devuelve el diccionario nested al que podemos agregar otra clave como lo hacemos para cualquier diccionario 🙂

Ejemplo:

 >>> d = {'myKey' : {'k1' : 'v1'}} >>> d['myKey']['k2'] = 'v2' >>> d {'myKey': {'k2': 'v2', 'k1': 'v1'}} 

Podrías tratar el dictado nested como inmutable:

myDict["myKey"] = dict(myDict["myKey"], **{ "nestedDictKey2" : anotherValue })