Python pandas如何通过代理键entry_id快速将JSON扁平化转为行?
方案1:使用Pandas实现(最简便)
直接用pivot方法实现长表转宽表,完全匹配你要的聚合逻辑:
import pandas as pd # 原始数据直接转DataFrame df = pd.DataFrame(data) # 指定entry_id为聚合键,type字段转为列名,value转为对应列值 pivot_df = df.pivot(index="entry_id", columns="type", values="value") # 缺失值填充为空字符串,重置索引把entry_id从索引转为普通列 pivot_df = pivot_df.fillna("").reset_index() # 转成目标列表字典格式 output = pivot_df.to_dict("records")
输出的output完全符合你要求的格式。
方案2:纯Python实现(无第三方依赖,效率极高)
时间复杂度为O(n),仅需遍历原始数据1次,性能远高于嵌套循环实现:
from collections import defaultdict # 收集所有存在的type字段,用于后续补全缺失值 type_set = {item["type"] for item in data} entry_groups = defaultdict(dict) # 单次遍历完成分组聚合 for item in data: entry_groups[item["entry_id"]][item["type"]] = item["value"] # 生成最终结果,补全所有缺失字段 output = [] for entry_id, val_map in entry_groups.items(): row = {"entry_id": entry_id} for t in type_set: row[t] = val_map.get(t, "") output.append(row)
内容的提问来源于stack exchange,提问作者FlipperPA
相关产品推荐
相关产品推荐

