【问题标题】:Traverse a dictionary recursively in Python?在Python中递归遍历字典?
【发布时间】:2014-04-09 02:44:13
【问题描述】:

递归遍历字典的更好方法是什么? 我可以用 lambda 或/和列表理解来做吗?

我有:

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

【问题讨论】:

    标签: python recursion dictionary lambda list-comprehension


    【解决方案1】:

    你可以递归遍历你的字典,使用这个通用的生成器函数,像这样

    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]
    

    【讨论】:

      【解决方案2】:

      最简单的方法是使用递归函数:

      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】:

        我的解决方案:

        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]

        【讨论】:

          猜你喜欢
          • 2023-03-29
          • 2013-03-04
          • 2018-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-21
          • 2020-10-30
          相关资源
          最近更新 更多