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
相关产品推荐
相关产品推荐

