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

如何将嵌套列表字典的字典转换为指定格式的DataFrame?

将嵌套字典转换为指定格式DataFrame的实现方案

注:你提供的原始字典存在语法错误,'2'对应的列表部分多了一个闭合花括号,已先修正为合法的Python字典格式。

方法一:遍历构造数据列表(直观易懂)

先遍历字典的每个step键和对应的医院数据列表,给每个医院的字典添加step字段,收集所有数据后再转换为DataFrame:

import pandas as pd

# 修正后的合法字典
data_dict = {
    '1': [
        {'name': 'Hospital 0', 'students': 5, 'grad': 71},
        {'name': 'Hospital 1', 'students': 8, 'grad': 74}
    ],
    '2': [
        {'name': 'Hospital 0', 'students': 11, 'grad': 72},
        {'name': 'Hospital 1', 'students': 10, 'grad': 78}
    ]
}

# 收集所有带step字段的数据记录
records = []
for step, hospitals in data_dict.items():
    for hosp in hospitals:
        # 复制原字典并添加step字段,避免修改原数据
        record = hosp.copy()
        record['step'] = step
        records.append(record)

# 转换为DataFrame并指定列顺序
df = pd.DataFrame(records, columns=['step', 'name', 'students', 'grad'])
print(df)

方法二:使用列表推导式简化代码

和方法一逻辑一致,但用列表推导式压缩代码,更简洁:

import pandas as pd

data_dict = {
    '1': [
        {'name': 'Hospital 0', 'students': 5, 'grad': 71},
        {'name': 'Hospital 1', 'students': 8, 'grad': 74}
    ],
    '2': [
        {'name': 'Hospital 0', 'students': 11, 'grad': 72},
        {'name': 'Hospital 1', 'students': 10, 'grad': 78}
    ]
}

# 用列表推导式生成所有记录
records = [{**hosp, 'step': step} for step, hospitals in data_dict.items() for hosp in hospitals]
df = pd.DataFrame(records, columns=['step', 'name', 'students', 'grad'])
print(df)

方法三:利用pandas内置方法实现

借助pandas的from_dict和多层索引展开功能,适合熟悉pandas高级操作的场景:

import pandas as pd

data_dict = {
    '1': [
        {'name': 'Hospital 0', 'students': 5, 'grad': 71},
        {'name': 'Hospital 1', 'students': 8, 'grad': 74}
    ],
    '2': [
        {'name': 'Hospital 0', 'students': 11, 'grad': 72},
        {'name': 'Hospital 1', 'students': 10, 'grad': 78}
    ]
}

# 将每个step的列表转为子DataFrame,合并成多层索引结构
df = pd.DataFrame.from_dict({k: pd.DataFrame(v) for k, v in data_dict.items()}, orient='index')
# 展开多层索引并重置列名
df = df.stack().apply(pd.Series).reset_index(level=0, names=['step']).reset_index(drop=True)
# 调整列顺序为目标格式
df = df[['step', 'name', 'students', 'grad']]
print(df)

以上三种方法最终都会生成你需要的DataFrame格式,输出如下:

stepnamestudentsgrad
1Hospital 0571
1Hospital 1874
2Hospital 01172
2Hospital 11078

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:39:22