2014-04-09 2 views
1

Каков наилучший способ перескакивания словаря рекурсивно? Могу ли я сделать это с помощью лямбда или/или списка?Локализовать словарь в Python?

У меня есть:

[ 
    { 
    "id": 1, 
    "children": [ 
     { 
     "id": 2, 
     "children": [] 
     } 
    ] 
    }, 
    { 
    "id": 3, 
    "children": [] 
    }, 
    { 
    "id": 4, 
    "children": [ 
     { 
     "id": 5, 
     "children": [ 
      { 
      "id": 6, 
      "children": [ 
       { 
       "id": 7, 
       "children": [] 
       } 
      ] 
      } 
     ] 
     } 
    ] 
    } 
] 

Я хочу:

[1,2,3,4,5,6,7]

+1

Скорее всего, да. –

ответ

3

Самый простой способ сделать это будет с рекурсивной функцией:

recursive_function = lambda x: [x['id']] + [item for child in x['children'] for item in recursive_function(child)] 
result = [item for topnode in whatever_your_list_is_called for item in recursive_function(topnode)] 
3

Вы можете рекурсивно пройти свои словари, с этой обобщенной функции генератора, как этот

def rec(current_object): 
    if isinstance(current_object, dict): 
     yield current_object["id"] 
     for item in rec(current_object["children"]): 
      yield item 
    elif isinstance(current_object, list): 
     for items in current_object: 
      for item in rec(items): 
       yield item 

print list(rec(data)) 
# [1, 2, 3, 4, 5, 6, 7] 
0

Мое решение:

results = [] 
def function(lst): 
    for item in lst: 
     results.append(item.get('id')) 
     function(item.get('children')) 
function(l) 
print results 

[1, 2, 3, 4, 5, 6, 7]

Смежные вопросы