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

Python如何补全指定月份区间字典列表的缺失月份并设value为0

完整实现方案

你的核心问题是原始数据没有先转成日期键的映射就直接合并,且生成结果时没有按时间顺序组装为要求的结构,以下是可直接运行的完整实现:


代码实现

from datetime import date, datetime as dt

# 替换为你实际的原始数据
original_data = [
    {'start_date': '2021-05', 'value': 1500.0},
    {'start_date': '2021-08', 'value': 6000.0},
    {'start_date': '2021-09', 'value': 3000.0},
    {'start_date': '2021-10', 'value': 2750.0},
    {'start_date': '2021-11', 'value': 19500.0}
]
# 原始数据转日期为键的映射字典,方便后续合并
original_map = {item['start_date']: item['value'] for item in original_data}

# 替换为你实际的起止日期变量
job_start_date_start = dt.strptime('2021-05', '%Y-%m').date()
job_start_date_end = dt.strptime('2021-11', '%Y-%m').date()

end_date = job_start_date_end if job_start_date_end is not None else date.today()
full_month_list = []
month_base_map = {}

if job_start_date_start:
    # 生成起止范围内所有有序月份字符串
    full_month_list = [
        dt.strptime(f'{y}-{m:02d}', '%Y-%m').strftime('%Y-%m')
        for y in range(job_start_date_start.year, end_date.year + 1)
        for m in range(
            job_start_date_start.month if y == job_start_date_start.year else 1,
            end_date.month + 1 if y == end_date.year else 13
        )
    ]
    # 初始化所有月份value为0
    month_base_map = {month: 0 for month in full_month_list}
    # 用原始数据覆盖存在的月份值
    month_base_map.update(original_map)

# 1. 输出补全后的字典列表格式
full_data_list = [{'start_date': k, 'value': month_base_map[k]} for k in full_month_list]
# 2. 输出前端需要的图表格式
chart_result = {
    "chartlabels": full_month_list,
    "chartvalues": [month_base_map[k] for k in full_month_list]
}

# 测试打印
print(full_data_list)
print(chart_result)

输出说明

  • 生成的full_data_list完全匹配你要求的补全后字典列表格式,缺失月份默认value为0
  • 生成的chart_result就是前端图表需要的结构,可直接返回给前端使用

内容的提问来源于stack exchange,提问作者Diego Gaona

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:45:07