You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何递归拼接Python字典嵌套对象的name键值(支持无限层级)

递归生成嵌套字典的层级name拼接列表

问题分析

给定一个包含嵌套对象的Python字典,其中type为folder的对象可能包含subobj子对象列表,type为pkg的对象是最终需要记录的节点。需要递归遍历所有节点,收集所有pkg类型节点的层级name拼接路径(用/分隔),且要支持无限嵌套的subobj结构。

实现思路

通过递归函数处理嵌套结构:

  • 遍历每个节点时,维护当前的路径前缀
  • 若当前节点是pkg类型,将当前路径前缀与节点name拼接后加入结果列表
  • 若当前节点是folder类型且包含subobj,则递归遍历subobj,并将路径前缀更新为当前完整路径加/,继续深入处理

代码实现

def collect_pkg_paths(items, prefix=""):
    paths = []
    for item in items:
        current_name = item["name"]
        # 拼接当前节点的完整路径
        full_path = f"{prefix}{current_name}" if prefix else current_name
        if item["type"] == "pkg":
            paths.append(full_path)
        elif item["type"] == "folder" and "subobj" in item:
            # 递归处理子对象,更新路径前缀
            sub_prefix = f"{full_path}/"
            paths.extend(collect_pkg_paths(item["subobj"], sub_prefix))
    return paths

# 输入数据
input_data = {
    "data": [
        {
            "name": "default",
            "type": "pkg"
        },
        {
            "name": "name1",
            "subobj": [
                {
                    "name": "subname1",
                    "subobj": [
                        {
                            "name": "sub-subname1",
                            "type": "pkg"
                        },
                        {
                            "name": "sub-subname2",
                            "type": "pkg"
                        }
                    ],
                    "type": "folder"
                }
            ],
            "type": "folder"
        }
    ]
}

# 调用函数并输出结果
result = collect_pkg_paths(input_data["data"])
for path in result:
    print(path)

输出结果

  • default
  • name1/subname1/sub-subname1
  • name1/subname1/sub-subname2

内容的提问来源于stack exchange,提问作者GVX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:25:28