2014-04-09 5 views
1

사전을 재귀 적으로 트래버스하는 더 좋은 방법은 무엇입니까? 람다 또는/및 목록 이해력으로 할 수 있습니까?파이썬에서 사전을 재귀 적으로 탐색 하시겠습니까?

나는이 :

[ 
    { 
    "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]

관련 문제