Al fin después de tanto batallar hemos dado con la respuesta de este enigma que ciertos lectores de nuestra web tienen. Si quieres aportar algún dato no dejes de dejar tu comentario.
Solución:
dict.get
acepta adicional default
parámetro. los value
se devuelve en lugar de None
si no hay tal key.
print myDict.get('key1', ).get('attr3')
Usar excepciones:
try:
print myDict['key1']['attr3']
except KeyError:
print "Can't find my keys"
Hay una publicación de blog muy agradable de Dan O’Huiginn sobre el tema de los diccionarios anidados. En última instancia, sugiere subclasificar dict con una clase que maneje mejor el anidamiento. Aquí está la subclase modificada para manejar su caso tratando de acceder keys de valores no dictados:
class ndict(dict):
def __getitem__(self, key):
if key in self: return self.get(key)
return self.setdefault(key, ndict())
Puede hacer referencia a los existentes anidados keys o los que no existen. Puede usar con seguridad la notación de corchetes para el acceso en lugar de .get(). si un key no existe en un objeto NestedDict, obtendrá un objeto NestedDict vacío. La inicialización es un poco prolija, pero si necesita la funcionalidad, podría funcionar para usted. Aquí hay unos ejemplos:
In [97]: x = ndict('key1': ndict('attr1':1, 'attr2':2))
In [98]: x
Out[98]: 'key1': 'attr1': 1, 'attr2': 2
In [99]: x['key1']
Out[99]: 'attr1': 1, 'attr2': 2
In [100]: x['key1']['key2']
Out[100]:
In [101]: x['key2']['key2']
Out[101]:
In [102]: x['key1']['attr1']
Out[102]: 1
Si para ti ha sido de provecho este artículo, sería de mucha ayuda si lo compartieras con más programadores así contrubuyes a extender este contenido.