将API返回的嵌套字典列表转换为指定格式Pandas DataFrame的最优方法
最优实现方案
直接通过遍历预处理+Pandas构造DataFrame即可,逻辑简洁性能最优,兼容不同条目包含不同属性键的场景:
完整实现代码
import pandas as pd # 你的原始API返回数据 items = [ { "identification":{ "id":"ID1", "FCID":"FCID1" }, "attributes":[ {"key":"KEY1","value":"VALUE11"}, {"key":"KEY2","value":"VALUE12"}, {"key":"KEY3","value":"VALUE13"} ] }, { "identification":{ "id":"ID2", "FCID":"FCID2" }, "attributes":[ {"key":"KEY1","value":"VALUE21"}, {"key":"KEY2","value":"VALUE22"}, {"key":"KEY3","value":"VALUE23"}, {"key":"KEY4","value":"VALUE24"} ] } ] # 第一步:预处理扁平化数据结构 processed_rows = [] for item in items: # 提取基础标识字段 row = item["identification"].copy() # 合并属性键值对 row.update({attr["key"]: attr["value"] for attr in item["attributes"]}) processed_rows.append(row) # 第二步:构造DataFrame df = pd.DataFrame(processed_rows) # (按需执行)匹配你示例的ID/FCID格式要求 df["ID"] = df["id"].str.strip("ID").astype(int) df["FCID"] = df["FCID"].str.replace("FCID", "F") # 调整列顺序,缺失值自动填充为NaN,可按需转成None df = df[["ID", "FCID", "KEY1", "KEY2", "KEY3", "KEY4"]].where(pd.notnull(df), None)
输出结果
运行后得到的df完全符合要求:
| ID | FCID | KEY1 | KEY2 | KEY3 | KEY4 |
|---|---|---|---|---|---|
| 1 | F1 | VALUE11 | VALUE12 | VALUE13 | None |
| 2 | F2 | VALUE21 | VALUE22 | VALUE23 | VALUE24 |
方案优势
- 时间复杂度为O(N),N为所有属性的总条数,仅需单次遍历即可完成预处理,性能远高于先展开再透视的方案
- 不需要提前知晓所有属性的key列表,自动适配不同条目包含不同属性的场景
- 逻辑简洁可读性强,后续维护调整成本极低
内容的提问来源于stack exchange,提问作者iammdi
相关产品推荐
相关产品推荐

