如何递归拼接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
相关产品推荐
相关产品推荐

