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

如何从给定嵌套字典生成指定格式的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:45:46