2016-11-09 3 views
0

Есть ли способ доступа к более глубокому объекту объекта?Доступ к более глубокому объекту

Я использую петлю для достижения результата желания:

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

Кажется мне агрессивный способом сделать это. Есть ли другой путь? Клавиши динамически, поэтому я не могу использовать obj['level_one']['level_two']

Спасибо.

+1

'Ключи dinamically' что означает? – MMF

+0

Вы * можете * сделать это, если будете обрабатывать возможные '' 'KeyError''' соответственно. –

+0

Если вам нужны все значения, вам нужно «loop», для которого у вас уже есть код. Для получения одного значения логика, которую вы используете для идентификации ключа в цикле 'for', использует то же самое. В чем проблема? –

ответ

0

Похоже, что рекурсивное решение может поместиться, если dict может иметь произвольное количество вложенности.

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

Этот код предоставит вам итератор со всеми значениями из ваших внутренних dicts.

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

Вы можете перемещаться по values или это не удобно, вы можете принудительно преобразовать его в список:

list(values) 
Смежные вопросы