Python:将数据库返回的字典列表转换为指定格式
解决方案
实现思路
- 动态提取所有需要包含的字段(排除
name),避免硬编码(适配数据库返回的任意字段) - 按
name(日期)分组,合并同一日期下的所有字段值 - 为每个日期的条目填充缺失字段,值设为
0,最终整理成目标格式
代码实现
from collections import defaultdict import json # 原始数据 original_data = [ {"a": 3, "name": "12-09-2022"}, {"b": 16, "name": "09-09-2022"}, {"b": 2, "name": "10-09-2022"}, {"b": 25, "name": "12-09-2022"}, {"c": 14, "name": "12-09-2022"}, {"c": 1, "name": "13-09-2022"} ] # 1. 提取所有非name字段(动态获取,适配数据库返回的任意字段) all_fields = set() for item in original_data: all_fields.update(k for k in item if k != "name") all_fields = sorted(all_fields) # 可选:保持字段顺序统一 # 2. 按name分组,合并对应字段值 grouped_data = defaultdict(dict) for item in original_data: date = item["name"] for key, val in item.items(): if key != "name": grouped_data[date][key] = val # 3. 填充缺失字段为0,生成最终结果 result = [] # 按日期排序(可选,让结果和示例顺序一致) for date in sorted(grouped_data.keys()): entry = {"name": date} for field in all_fields: entry[field] = grouped_data[date].get(field, 0) result.append(entry) # 打印格式化后的结果 print(json.dumps(result, indent=2))
输出结果
[ { "name": "09-09-2022", "a": 0, "b": 16, "c": 0 }, { "name": "10-09-2022", "a": 0, "b": 2, "c": 0 }, { "name": "12-09-2022", "a": 3, "b": 25, "c": 14 }, { "name": "13-09-2022", "a": 0, "b": 0, "c": 1 } ]
补充说明
如果字段列表可以直接从数据库获取(比如查询表结构得到所有字段),可以直接替换all_fields的生成逻辑,这样即使原始数据中没有某个字段,也能在结果中保留该字段并设为0,更贴合数据库场景。
内容的提问来源于stack exchange,提问作者Samuel Nunes
相关产品推荐
相关产品推荐

