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

如何基于组内首行第四列日期排序CSV分组列表?

问题:按组首行日期排序并合并CSV分组数据

需求说明

  • 处理CSV文件,将地址相同的行划分为1-10行的组
  • 按每个组首行第四列的日期对组进行排序,再合并所有组得到目标列表
  • 每组内部已按日期正确排序

数据伪示例

原分组数据:

list_of_parcel_groups = [
    [ [0,1,2,"11/22/2022"], [0,1,2,"01/01/2001"] ],
    [ [0,1,2,"3/11/2022"], [0,1,2,"3/4/2016"], [0,1,2,"5/18/2011"], [0,1,2,"03/13/2009"] ],
    [ [0,1,2,"5/13/2019"], [0,1,2,"4/20/2018"], [0,1,2,"7/13/1999"] ]
]

预期合并排序后的结果:

qualified = [
    [0,1,2,"5/13/2019"], [0,1,2,"4/20/2018"], [0,1,2,"7/13/1999"],
    [0,1,2,"3/11/2022"], [0,1,2,"3/4/2016"], [0,1,2,"5/18/2011"], [0,1,2,"03/13/2009"],
    [0,1,2,"11/22/2022"], [0,1,2,"01/01/2001"]
]

排序依据是各组首行的日期:

  • list_of_parcel_groups[0][0][3](11/22/2022)
  • list_of_parcel_groups[1][0][3](3/11/2022)
  • list_of_parcel_groups[2][0][3](5/13/2019)

当前尝试的代码

import datetime

qualified = []
list_of_parcel_groups = [
    [ [0,1,2,"11/22/2022"], [0,1,2,"01/01/2001"] ],
    [ [0,1,2,"3/11/2022"], [0,1,2,"3/4/2016"], [0,1,2,"5/18/2011"], [0,1,2,"03/13/2009"] ],
    [ [0,1,2,"5/13/2019"], [0,1,2,"4/20/2018"], [0,1,2,"7/13/1999"] ]
]

for i in range(len(list_of_parcel_groups)):
    if i == 0:
        string_input_with_date = list_of_parcel_groups[i][0][3]
        date = datetime.strptime(string_input_with_date, "%m/%d/%Y")
        for item in list_of_parcel_groups[i]:
            qualified.append(item)
        continue
    
    string_input_with_date1 = list_of_parcel_groups[i][0][3]
    date1 = datetime.strptime(string_input_with_date1, "%m/%d/%Y")
    if (date1.date() <= date.date()):
        
        list_of_parcel_groups[i].reverse()
        for item in list_of_parcel_groups[i]:
            qualified.insert(0,item)
        list_of_parcel_groups[i].reverse()
        date = datetime.strptime(list_of_parcel_groups[i][0][3], "%m/%d/%Y")
        continue
    if (date1.date() > date.date()):
        
        for item in list_of_parcel_groups[i]:
            qualified.append(item)
        date = datetime.strptime(list_of_parcel_groups[i][0][3], "%m/%d/%Y")

问题点

逐个比较组并插入头部/尾部的逻辑无法实现全局排序,因为新组可能需要插入到列表中间位置,而非仅头部或尾部,导致最终结果不符合预期。(注:每组内部已按日期正确排序,插入时反转组是为了保持原组结构,后续仍能通过list_of_parcel_groups[i][0][3]获取日期)

解决方案

正确的做法是先对所有组按首行日期完成全局排序,再依次合并各组:

import datetime

list_of_parcel_groups = [
    [ [0,1,2,"11/22/2022"], [0,1,2,"01/01/2001"] ],
    [ [0,1,2,"3/11/2022"], [0,1,2,"3/4/2016"], [0,1,2,"5/18/2011"], [0,1,2,"03/13/2009"] ],
    [ [0,1,2,"5/13/2019"], [0,1,2,"4/20/2018"], [0,1,2,"7/13/1999"] ]
]

# 按组首行第四列的日期降序排序各组
sorted_groups = sorted(
    list_of_parcel_groups,
    key=lambda group: datetime.datetime.strptime(group[0][3], "%m/%d/%Y"),
    reverse=True
)

# 合并所有组到qualified列表
qualified = []
for group in sorted_groups:
    qualified.extend(group)

# 验证结果
print(qualified)

逻辑说明

  1. 全局排序:使用sorted()函数,通过key参数指定按每组首行的日期转换为datetime对象进行排序,reverse=True实现降序,匹配预期结果的顺序
  2. 合并组:直接用extend()将每组的所有元素追加到结果列表,因每组内部已完成正确排序,无需额外处理
  3. 优势:代码简洁,避免逐个插入的逻辑错误,确保全局排序准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:45:40