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

如何合并嵌套列表中起始日期相同的子列表并保留最优条目

解决嵌套列表按起始日期合并并保留最晚结束日期条目的方案

这是个很常见的分组筛选需求,咱们用Python就能轻松实现,核心思路就是按起始日期分组,然后在每个组里保留结束日期最晚的那条记录。下面给两种实用的实现方法:

方法一:用字典分组(高效遍历,无需排序)

这种方法只需要遍历一次原列表,时间复杂度是O(n),适合处理较大的数据集:

myList = [[20, 'Start', '2008-10-10', 'End', '2008-11-09', 'NG'], 
          [21, 'Start', '2008-10-10', 'End', '2008-12-15', 'G'], 
          [22, 'Start', '2009-11-23', 'End', '2009-12-10', 'B']]

# 用字典按起始日期分组,键是起始日期,值存当前组最晚结束的条目
grouped_dict = {}

for item in myList:
    start_date = item[2]  # 起始日期在子列表的第3个位置(索引2)
    end_date = item[4]    # 结束日期在子列表的第5个位置(索引4)
    
    if start_date not in grouped_dict:
        # 该起始日期首次出现,直接存入字典
        grouped_dict[start_date] = item
    else:
        # 对比当前条目和字典中已有条目的结束日期,保留更晚的
        if end_date > grouped_dict[start_date][4]:
            grouped_dict[start_date] = item

# 把字典的值转换成列表就是最终结果
final_list = list(grouped_dict.values())
print(final_list)

关键说明:

这里咱们直接用字符串格式的日期比较大小是可行的,因为YYYY-MM-DD的字符串排序逻辑和实际日期的先后顺序完全一致,不用额外转换为datetime对象,省了不少步骤。


方法二:用itertools.groupby分组(适合熟悉迭代工具的场景)

如果习惯用Python的迭代工具库,也可以用groupby来实现,但要注意**groupby要求先对分组键排序**,所以步骤会多一步排序:

from itertools import groupby

myList = [[20, 'Start', '2008-10-10', 'End', '2008-11-09', 'NG'], 
          [21, 'Start', '2008-10-10', 'End', '2008-12-15', 'G'], 
          [22, 'Start', '2009-11-23', 'End', '2009-12-10', 'B']]

# 先按起始日期对列表排序,确保相同起始日期的条目挨在一起
sorted_list = sorted(myList, key=lambda x: x[2])

final_list = []
# 按起始日期分组,然后在每个组里取结束日期最大的条目
for start_date, group_items in groupby(sorted_list, key=lambda x: x[2]):
    max_item = max(group_items, key=lambda x: x[4])
    final_list.append(max_item)

print(final_list)

两种方法对比:

  • 方法一无需排序,遍历一次即可完成,效率更高;
  • 方法二代码更简洁,但因为需要排序,时间复杂度是O(n log n),适合中小规模的列表。

两种方法运行后都会得到你想要的结果:

[[21, 'Start', '2008-10-10', 'End', '2008-12-15', 'G'], [22, 'Start', '2009-11-23', 'End', '2009-12-10', 'B']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:54:59