Python实现元组列表按日期转换为指定格式去重嵌套字典
问题根因
原有代码逻辑存在两个核心错误:
- 遍历元组时直接对msm名称对应的键做整体赋值,同msm下后遍历到的证书类型会直接覆盖之前存储的其他类型数据,无法合并多类证书计数
- 没有提前为三类证书预设0值初始状态,缺失的证书类型不会自动补填默认值
正确实现代码
from collections import defaultdict # 定义需要统计的全量证书类型,作为默认值模板 VALID_CERTS = ("base-certificate", "case-certificate", "standard-certificate") # 初始化按日期分组的存储容器 grouped = defaultdict(dict) # 遍历原始数据集m for msm_name, cert_type, count, date in m: # 首次遇到当前日期下的指定msm时,初始化三类证书计数全为0 if msm_name not in grouped[date]: grouped[date][msm_name] = {cert: 0 for cert in VALID_CERTS} # 更新对应类型的证书计数,不会覆盖其他类型的已有值 # 若同一msm+日期+证书类型存在多条记录,用+=可自动累加;若单条记录唯一可直接用=赋值 grouped[date][msm_name][cert_type] += count # 为每个日期分组添加'x'键存储日期值,整理为最终结构 result = [] for date_val, msm_stats in grouped.items(): date_group = {"x": date_val} date_group.update(msm_stats) result.append(date_group)
逻辑说明
- 初始化msm维度的统计字典时,直接把三类证书的初始值设为0,遍历结束后自然不存在缺失值,不需要额外补0
- 同日期下同msm的多条不同类型证书记录,只会更新对应类型的计数字段,不会覆盖其他类型的已存数据
- 所有数据遍历完成后再统一添加
x键存储日期,避免遍历过程中重复操作
内容的提问来源于stack exchange,提问作者Olude david
相关产品推荐
相关产品推荐

