You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:将数据库返回的字典列表转换为指定格式

解决方案

实现思路

  1. 动态提取所有需要包含的字段(排除name),避免硬编码(适配数据库返回的任意字段)
  2. 按name(日期)分组,合并同一日期下的所有字段值
  3. 为每个日期的条目填充缺失字段,值设为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:40:49