如何从给定嵌套字典生成指定格式的DataFrame?
问题:从嵌套字典生成指定格式DataFrame
我有如下结构的嵌套字典:
[ { "name": "A", "flag": "folder", "children": [ { "name": "A1", "flag": "folder", "children": [ { "name": "A1x", "flag": "file", "children": [] }, { "name": "A1y", "flag": "file", "children": [] } ] } ] } ]
希望从中生成指定格式的DataFrame(如附图所示),请问是否有简洁高效的实现方式?
解决方案
可以通过递归遍历嵌套字典收集节点信息,再转换为DataFrame,这种方式时间复杂度为O(n)(n为节点总数),简洁且高效。以下提供两种常见目标格式的实现:
1. 生成含完整路径与类型的DataFrame
适合需要直接查看文件/文件夹完整路径的场景:
import pandas as pd def traverse(node, path=""): # 拼接当前节点的完整路径 current_path = f"{path}/{node['name']}" if path else node['name'] yield {"路径": current_path, "类型": node['flag']} # 递归遍历子节点 for child in node['children']: yield from traverse(child, current_path) # 原始嵌套字典数据 data = [ { "name": "A", "flag": "folder", "children": [ { "name": "A1", "flag": "folder", "children": [ { "name": "A1x", "flag": "file", "children": [] }, { "name": "A1y", "flag": "file", "children": [] } ] } ] } ] # 收集所有节点记录 records = [] for root in data: records.extend(list(traverse(root))) # 转换为DataFrame df = pd.DataFrame(records) print(df)
输出结果:
路径 类型 0 A folder 1 A/A1 folder 2 A/A1/A1x file 3 A/A1/A1y file
2. 生成层级分列的DataFrame
适合需要按层级展示目录结构的场景:
import pandas as pd def traverse_hierarchy(node, levels=None): if levels is None: levels = [] # 记录当前节点的层级路径 current_levels = levels + [node['name']] yield {"层级路径": current_levels, "类型": node['flag']} # 递归遍历子节点 for child in node['children']: yield from traverse_hierarchy(child, current_levels) # 收集所有节点的层级信息 records_hierarchy = [] for root in data: records_hierarchy.extend(list(traverse_hierarchy(root))) # 确定最大层级数,补全空值 max_level = max(len(r['层级路径']) for r in records_hierarchy) # 转换为层级分列的格式 df_hierarchy = pd.DataFrame([ {f"层级{i+1}": r['层级路径'][i] if i < len(r['层级路径']) else None for i in range(max_level)} | {"类型": r['类型']} for r in records_hierarchy ]) print(df_hierarchy)
输出结果:
层级1 层级2 层级3 类型 0 A None None folder 1 A A1 None folder 2 A A1 A1x file 3 A A1 A1y file
内容的提问来源于stack exchange,提问作者Pengin
相关产品推荐
相关产品推荐

