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

Python/Django 合并两个字典列表并按日期累加数据字段值

解决方案

通过以day字段为键构建中间聚合字典的方式实现合并,可直接运行的代码如下:

# 示例输入
list_one = [
  {'day': '2021-09-05 00:00:00+02:00', 'airtime_total_for_day': '650.00', 'data_total_for_day': '0'},
  {'day': '2021-09-16 00:00:00+02:00', 'airtime_total_for_day': '124.20', 'data_total_for_day': '20.00'},
]

list_two = [
  {'day': '2021-09-10 00:00:00+02:00', 'data_bundle_total_for_day': '100.00'},
  {'day': '2021-09-16 00:00:00+02:00', 'data_bundle_total_for_day': '50.00'},
  {'day': '2021-09-18 00:00:00+02:00', 'data_bundle_total_for_day': '45.00'},
]

# 中间聚合字典,key为日期,value为合并后的条目
merged_map = {}

# 处理第一个列表的所有条目
for item in list_one:
    day_val = item['day']
    merged_map[day_val] = item.copy()
    # 将数据量转为float类型方便后续计算
    merged_map[day_val]['data_total_for_day'] = float(merged_map[day_val]['data_total_for_day'])

# 处理第二个列表的所有条目
for item in list_two:
    day_val = item['day']
    bundle_val = float(item['data_bundle_total_for_day'])
    if day_val in merged_map:
        # 同日期条目叠加数据量
        merged_map[day_val]['data_total_for_day'] += bundle_val
    else:
        # 新增不存在的日期条目
        merged_map[day_val] = {
            'day': day_val,
            'airtime_total_for_day': '0.00',
            'data_total_for_day': bundle_val
        }

# 将数值转回字符串格式,和原有字段格式对齐
for entry in merged_map.values():
    entry['data_total_for_day'] = f"{entry['data_total_for_day']:.2f}"

# 生成最终合并列表,如需按日期排序可使用下方注释的代码替换
merged_list = list(merged_map.values())
# merged_list = sorted(merged_map.values(), key=lambda x: x['day'])

# 输出验证
print(merged_list)

运行后得到的结果完全符合需求,其中2021-09-16对应的data_total_for_day值为70.00。如果不需要保留airtime_total_for_day字段,直接删除第二个列表处理逻辑中对应的赋值行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:54:03