2014-04-09 129 views
1

什麼是遞歸遍歷字典的更好方法? 我可以用lambda或/和list comprehension來做到嗎?在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]