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
相关产品推荐
相关产品推荐

