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

如何将含嵌套字典列表的字典列表转换为Pandas DataFrame?

两类嵌套字典列表转Pandas DataFrame的实现方法

场景一:嵌套字典含带序号的键(输出宽格式DataFrame)

示例输入数据

myDict = [
    {'Name': 'Jack', 'Children': [{'Child_1': 'Sarah'}, {'Child_2': 'Mary'}], 'Favorite_Colors': [{'Color_1': 'Blue'}, {'Color_2': 'Red'}]}, 
    {'Name': 'Jill', 'Children': [{'Child_1': 'Carl'}, {'Child_2': 'Sam'}], 'Favorite_Colors': [{'Color_1': 'Green'}, {'Color_2': 'Yellow'}]}
]

实现代码

import pandas as pd

# 预处理数据:合并嵌套字典
processed_data = []
for item in myDict:
    merged_dict = {'Name': item['Name']}
    # 合并Children列表内的所有小字典
    merged_dict.update({k: v for sub_dict in item['Children'] for k, v in sub_dict.items()})
    # 合并Favorite_Colors列表内的所有小字典
    merged_dict.update({k: v for sub_dict in item['Favorite_Colors'] for k, v in sub_dict.items()})
    processed_data.append(merged_dict)

# 生成宽格式DataFrame
df = pd.DataFrame(processed_data)
print(df)

实现逻辑

  1. 遍历原始字典列表中的每个元素,先保留顶层的Name字段;
  2. 用字典推导式将Children和Favorite_Colors列表中的所有嵌套小字典合并为一个大字典;
  3. 将处理后的字典列表传入pd.DataFrame,直接生成宽格式结果。

场景二:嵌套字典的键无序号(输出长格式DataFrame)

示例输入数据

myDict = [
    {'Name': 'Jack', 'Children': [{'Child': 'Sarah'}, {'Child': 'Mary'}], 'Favorite_Colors': [{'Color': 'Blue'}]}, 
    {'Name': 'Jill', 'Children': [{'Child': 'Carl'}], 'Favorite_Colors': [{'Color': 'Green'}, {'Color': 'Yellow'}]}
]

实现代码

import pandas as pd
from itertools import zip_longest

# 预处理数据:展开嵌套列表并对齐缺失值
processed_data = []
for item in myDict:
    name = item['Name']
    # 提取所有Child值
    child_list = [sub_dict['Child'] for sub_dict in item['Children']]
    # 提取所有Color值
    color_list = [sub_dict['Color'] for sub_dict in item['Favorite_Colors']]
    # 按最长列表长度对齐,缺失值补None
    for child, color in zip_longest(child_list, color_list):
        processed_data.append({'Name': name, 'Child': child, 'Color': color})

# 生成长格式DataFrame,None自动转为NaN
df = pd.DataFrame(processed_data)
print(df)

实现逻辑

  1. 遍历原始字典列表中的每个元素,提取顶层Name;
  2. 分别从Children和Favorite_Colors列表中取出所有对应字段的值,形成两个独立列表;
  3. 用zip_longest按最长列表的长度对齐两个列表,缺失位置填充None;
  4. 将每组(Name, Child, Color)存入列表,传入pd.DataFrame后,None会自动转为NaN,得到包含所有数据的长格式结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:01:23