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

Python中如何将嵌套字典展平为多行?最佳方案咨询

Python展平嵌套字典列表为单行一字典的方法

要实现每个字典单独占一行的效果,核心思路是先把列表拆分成多行,再逐行展平嵌套字典,具体步骤如下:

  • 第一步:拆分列表字段。用pandas的explode()方法,把包含嵌套字典列表的列“炸开”,让列表里的每个字典单独占一行。
  • 第二步:展平单行内的嵌套字典。将每行的字典转换为DataFrame列,再处理字典里的子嵌套结构。

代码示例

import pandas as pd

# 模拟你的数据结构
data = {
    '主表ID': [1, 2],
    '嵌套列': [
        [{'字段1': '文本值', '字段2': {'子字段1': 100}}, {'字段3': 200, '字段4': {'子字段2': '测试'}}],
        [{'字段5': 300, '字段6': {'子字段3': '示例'}}]
    ]
}
df = pd.DataFrame(data)

# 1. 拆分列表为单行一字典
df_exploded = df.explode('嵌套列', ignore_index=True)

# 2. 展平每行的字典
df_flattened = pd.concat([
    df_exploded.drop('嵌套列', axis=1),
    df_exploded['嵌套列'].apply(pd.Series)
], axis=1)

# 处理字典里的子嵌套(如果有)
for col in df_flattened.columns:
    # 判断列里是否还有嵌套字典
    if df_flattened[col].apply(lambda x: isinstance(x, dict)).any():
        # 展平子字典并添加前缀区分
        df_flattened = pd.concat([
            df_flattened.drop(col, axis=1),
            df_flattened[col].apply(pd.Series).add_prefix(f'{col}_')
        ], axis=1)

print(df_flattened)

效果说明

  • 执行explode()后,原列表里的每个字典都会成为独立行,保留主表的关联字段(比如示例里的「主表ID」)。
  • 后续的apply(pd.Series)会把字典的键转成列名,值对应到单元格;如果遇到子字典,会进一步拆分成带前缀的列,避免字段名冲突。

这个方法解决了直接用json_normalize或递归函数导致的“单行多列”问题,完全匹配你要的「每个字典对应单独一行」的需求。

内容的提问来源于stack exchange,提问作者Alefiya S. Tikiwala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:45:35