Python:将嵌套字典列表转为DataFrame,求更优实现方法
嵌套字典列表转DataFrame的优化实现
需求说明
将嵌套字典列表转换为以键为列名、对应Value值为行数据的DataFrame。
示例数据
l = [ { "Items": { "a": { "Value": 10 }, "b": { "Value": 20 }, "c": { "Value": 30 } } }, { "Items": { "a": { "Value": 100 }, "b": { "Value": 200 }, "c": { "Value": 300 } } }, { "Items": { "a": { "Value": 1000 }, "b": { "Value": 2000 }, "c": { "Value": 3000 } } } ]
期望结果
| a | b | c | |------|------|------| | 10 | 20 | 30 | | 100 | 200 | 300 | | 1000 | 2000 | 3000 |
原代码问题
你提供的代码存在变量k未定义的问题,会直接抛出运行异常;同时手动循环构建结果字典的写法繁琐,可读性和效率都有待提升。
优化实现方式
方式一:列表推导式扁平化字典后转DataFrame
先将每个嵌套结构转换为扁平的键值对字典,再直接传入pd.DataFrame(),写法直观简洁:
import pandas as pd # 扁平化每个条目:提取Items中的键和对应Value值 flat_records = [{key: item["Value"] for key, item in entry["Items"].items()} for entry in l] df = pd.DataFrame(flat_records)
方式二:使用pd.json_normalize解析嵌套结构
利用pandas内置的json_normalize工具专门处理嵌套字典结构,代码更简洁高效:
import pandas as pd # 解析嵌套结构,并重命名列去掉".Value"后缀 df = pd.json_normalize(l, record_path=["Items"]).rename(columns=lambda col: col.split(".")[0])
两种方式都能快速生成目标格式的DataFrame,避免了手动循环的冗余代码,可读性和执行效率更优。
内容的提问来源于stack exchange,提问作者arpymastro
相关产品推荐
相关产品推荐

