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

如何在Python中对defaultdict同日期的数值进行累加求和?

解决defaultdict中按日期累加数值的问题

原始数据

你的初始defaultdict结构如下:

from collections import defaultdict
import datetime

original_data = defaultdict(list, {
    '11106000022': [(216.0, datetime.datetime(2022, 10, 5, 0, 0)), 
                    (216.0, datetime.datetime(2022, 10, 5, 0, 0)), 
                    (370.0, datetime.datetime(2022, 10, 6, 0, 0)), 
                    (110.0, datetime.datetime(2022, 10, 6, 0, 0))],
    '11106000053': [(89.0, datetime.datetime(2022, 10, 5, 0, 0)), 
                    (500.0, datetime.datetime(2022, 10, 7, 0, 0))],
    '11106000083': [(50.0, datetime.datetime(2022, 10, 15, 0, 0))],
    '11106000126': [(170.0, datetime.datetime(2022, 10, 14, 0, 0))]
})

解决方案

方法一:字典推导式 + 临时累加字典

通过遍历每个键对应的条目,用defaultdict(float)按日期累加数值,再转换为目标格式:

from collections import defaultdict

processed_data = {
    key: [
        (total, dt) 
        for dt, total in defaultdict(float, ((dt, val) for val, dt in entries)).items()
    ]
    for key, entries in original_data.items()
}

方法二:map函数 + 处理函数

先封装条目处理逻辑,再用map批量处理所有键值对:

def sum_by_date(entries):
    date_totals = defaultdict(float)
    for val, dt in entries:
        date_totals[dt] += val
    return [(total, dt) for dt, total in date_totals.items()]

processed_data = dict(map(lambda item: (item[0], sum_by_date(item[1])), original_data.items()))

处理结果

执行后,processed_data中'11106000022'的结果为:

[(432.0, datetime.datetime(2022, 10, 5, 0, 0)), (480.0, datetime.datetime(2022, 10, 6, 0, 0))]

(注:你提供的示例结果中10月6日的数值未累加,推测是笔误,上述代码会将同一日期的所有数值求和合并为单个条目)

内容的提问来源于stack exchange,提问作者Tugrul Gokce

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:20:29