2016-11-09 3 views
0

Gibt es eine Möglichkeit, auf das tiefere Objekt eines Objekts zuzugreifen?Auf tieferes Objekt zugreifen

Ich bin mit Schleifen den Wunsch Ergebnis zu erzielen:

obj = { 'level_one': { 'level_two': {} } } 
for k,v in obj.items(): 
    for k,v in v.items(): 
     print v 

Scheint mir eine aggressive Art und Weise, dies zu tun. Gibt es einen anderen Weg? Die Schlüssel sind dinamically, also kann ich nicht obj['level_one']['level_two']

Dank verwenden.

+1

'Die Tasten sind dinamically' was bedeutet? – MMF

+0

Sie * können * das tun, wenn Sie mögliche '' 'KeyError'''s entsprechend behandeln. –

+0

Wenn Sie alle Werte benötigen, brauchen Sie 'Schleife', für die der Code, den Sie bereits haben. Um einen einzelnen Wert zu erhalten, verwenden Sie dieselbe Logik, mit der Sie den Schlüssel in der 'for'-Schleife identifizieren. Was ist das Problem? –

Antwort

0

Es sieht so aus, als ob eine rekursive Lösung passt, wenn das Diktat eine beliebige Menge an Nestedness haben kann.

def deep_dict_loop(obj): 
    for k in obj: 
     if isinstance(obj[k], dict): 
      yield from deep_dict_loop(obj[k]) 
     else: 
      yield obj[k] 

for value in deep_dict_loop({ 'level_one': { 'level_two': {'foo': 'bar'} } }): 
    print value # prints 'bar' 
0

Dieser Code wird Ihnen einen Iterator mit allen Werten aus Ihrem inneren dicts geben.

import itertools 
values = itertools.chain.from_ierable({v.values() for v in obj.values()}) 

können Sie auf values laufen oder es ist nicht praktisch, man kann es zur Liste zwingen konvertieren:

list(values) 
Verwandte Themen