2016-08-01 15 views
2

Ich habe ein Python-Diktat, und einige (aber nicht alle) seiner Werte sind auch dicts.Verschachtelte Indizierung in Python

Zum Beispiel:

d = {'a' : 1, 
     'b' : {'c' : 3, 'd' : 'target_value'} 
     } 

Was wäre der beste Weg, in Schlüsseln passieren jeden Zielwert zu erreichen? Etwas wie retrieve(d, (key, nested_key, ...)) wo retrieve(d, ('b','d'))target value zurückgeben würde.

+0

Wo bekommen Sie die verrückte Datenstruktur aus? –

+0

Ich analysiere eine Datei und organisiere sie in Wörterbücher, die manchmal verschachtelt sind. Dies gilt jedoch für verschachtelte, indexierbare Datenstrukturen. – jpm

+0

Mein Fehler 'retrieve (d, ('b', 'd'))' sollte 'target_value' zurückgeben – jpm

Antwort

2

Die bessere Option hier ist, einen Weg zu finden, um Ihre Datenstruktur zu normalisieren, aber wenn Sie aus irgendeinem Grund nicht können, können Sie einfach auf jeden Schlüssel in Reihenfolge zugreifen.

Zum Beispiel:

def nested_getter(dictionary, *keys): 
    val = dictionary[keys[0]] 
    for key in keys[1:]: 
     val = val[key] 
    return val 
d = {'a' : 1, 
    'b' : {'c' : 3, 'd' : 'target_value'} 
    } 
print(nested_getter(d, 'b', 'd')) 

Sie könnten auch tun es rekursiv:

def nested_getter(dictionary, *keys): 
    val = dictionary[keys[0]] 
    if isinstance(val, dict): 
     return nested_getter(val, *keys[1:]) 
    else: 
     return val