【问题标题】:get all values by a specific key in a deep nested dict using python使用python通过深度嵌套dict中的特定键获取所有值
【发布时间】:2022-07-08 22:15:52
【问题描述】:
{
    "id": 1,
    "name": "Test",
    "fils": [
        {"id": 2, "name": "Test", "fils": []},
        {"id": 4, "name": "Test", "fils": []},
        {
            "id": 5,
            "name": "Test",
            "fils": [
                {
                    "id": 12,
                    "name": "Test",
                    "fils": [{"id": 14, "name": "test", "fils": []}],
                }
            ],
        },
    ],
}

所以我的目标是获取所有 [1,2,4,5,12,14] 的 id。 有什么方法可以使用递归函数或其他方式来获得它?

【问题讨论】:

  • “有办法吗?”是的。
  • 我建议你把它分成小块。事实上,这是递归的一个基本概念。用最简单的例子解决问题,然后从那里开始构建。

标签: python dictionary recursion


【解决方案1】:

您可以使用递归。如果dct 是您问题中的字典,那么:

def get_ids(d):
    if isinstance(d, dict):
        for k, v in d.items():
            if k == "id":
                yield v
            else:
                yield from get_ids(v)
    elif isinstance(d, list):
        for v in d:
            yield from get_ids(v)


ids = list(get_ids(dct))
print(ids)

打印:

[1, 2, 4, 5, 12, 14]

【讨论】:

    【解决方案2】:

    或者您可以使用迭代方法:

    def get_ids(adict, key):
        stack = [adict]
        result = []
    
        while stack:
            elem = stack.pop()
            if isinstance(elem, dict):
                for k, v in elem.items():
                    if k == key:
                        result.append(v)
                    stack.append(v)
            elif isinstance(elem, list):
                stack.extend(elem)
        return result
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-09
      • 2020-07-22
      • 2022-10-16
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      相关资源
      最近更新 更多