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

Python中按列表唯一活动值求和并保留对应最新日期

按活动聚合列表的实现方案

针对你提供的元组列表,要按flight这类活动名称聚合,保留对应活动的最新日期及其关联地点,并对数值求和,可以用Python通过字典分组的方式实现,具体步骤和代码如下:

实现思路

  1. 用字典按活动名称分组,存储每个活动的最新日期、对应地点以及数值总和。
  2. 遍历原始列表,逐个处理每个元组:
    • 若活动未在字典中,直接初始化该活动的记录。
    • 若活动已存在,对比当前元组的日期与字典中存储的日期:
      • 日期更新的话,替换日期和地点,同时累加数值。
      • 日期更早的话,仅累加数值。
  3. 最后将字典中的记录转换回原格式的元组列表。

代码实现

original_list = [
    ('2023-03-15', 'paris', 'flight', 4),
    ('2023-03-21', 'berlin', 'flight', 2),
    ('2023-03-01', 'madrid', 'drive', 10),
    ('2023-03-04', 'madrid', 'cycling', 3),
    ('2023-03-08', 'rome', 'train', 9),
    ('2023-03-11', 'amsterdam', 'flight', 5),
    ('2023-03-14', 'london', 'boat', 1)
]

aggregated_data = {}

for date, location, activity, val in original_list:
    if activity not in aggregated_data:
        # 首次遇到该活动,初始化记录
        aggregated_data[activity] = (date, location, val)
    else:
        stored_date, stored_loc, total_val = aggregated_data[activity]
        # 利用YYYY-MM-DD格式的字符串可直接比较日期大小的特性
        if date > stored_date:
            aggregated_data[activity] = (date, location, total_val + val)
        else:
            aggregated_data[activity] = (stored_date, stored_loc, total_val + val)

# 转换为目标格式的列表
result_list = [(d, loc, act, total) for act, (d, loc, total) in aggregated_data.items()]

print(result_list)

运行结果

执行后得到的聚合列表如下:

[
    ('2023-03-21', 'berlin', 'flight', 11),
    ('2023-03-01', 'madrid', 'drive', 10),
    ('2023-03-04', 'madrid', 'cycling', 3),
    ('2023-03-08', 'rome', 'train', 9),
    ('2023-03-14', 'london', 'boat', 1)
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:47:14