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

Python如何按首元素分组、日期排序嵌套列表并更新Rank值

问题描述

现有输入数据

ArrayData = [['a', 'ad', '02/10/2021  7:39:19 am', 'Rank:1'],
             ['b', 'db', '02/10/2021 6:25:20 am', 'Rank:2'],
             ['a', 'sd', '02/10/2021  5:39:19 am', 'Rank:3'],
             ['b', 'esas', '02/10/2021 6:25:20 am', 'Rank:1'],
             ['a', 'aser', '02/10/2021  9:39:19 am', 'Rank:2'],
             ['d', 'ssss', '02/10/2021  11:39:19 am', 'Rank:1']]

需求说明

  • 子列表按第一个元素分组,各组默认按首元素字母升序(a<b<c<d)排列
  • 同组内按第三个字段的日期时间倒序排序,时间越新排名越高
  • 按排序结果更新每个子列表末尾的Rank值,组内第一名标Rank:1,后续依次递增

现有代码问题

当前仅能全局按时间字段排序,没有实现分组、组内排名更新的逻辑,且直接对时间字符串排序可能出现格式匹配错误。


优化后实现代码
from collections import defaultdict
from datetime import datetime

ArrayData = [['a', 'ad', '02/10/2021  7:39:19 am', 'Rank:1'],
             ['b', 'db', '02/10/2021 6:25:20 am', 'Rank:2'],
             ['a', 'sd', '02/10/2021  5:39:19 am', 'Rank:3'],
             ['b', 'esas', '02/10/2021 6:25:20 am', 'Rank:1'],
             ['a', 'aser', '02/10/2021  9:39:19 am', 'Rank:2'],
             ['d', 'ssss', '02/10/2021  11:39:19 am', 'Rank:1']]

# 1、按首元素分组
group_dict = defaultdict(list)
for item in ArrayData:
    group_dict[item[0]].append(item)

result = []
# 2、按组名升序遍历所有分组
for group_key in sorted(group_dict.keys()):
    # 3、同组内按时间倒序排序,先把时间字符串转成datetime对象避免排序错误
    sorted_group = sorted(
        group_dict[group_key],
        key=lambda x: datetime.strptime(x[2].strip(), '%d/%m/%Y %I:%M:%S %p'),
        reverse=True
    )
    # 4、更新组内Rank
    for idx, item in enumerate(sorted_group):
        item[-1] = f'Rank:{idx+1}'
    # 5、把处理好的组加入最终结果
    result.extend(sorted_group)

# 如果需要最终结果全局按时间倒序排列,取消注释下面这行即可匹配你给出的预期输出顺序
# result = sorted(result, key=lambda x: datetime.strptime(x[2].strip(), '%d/%m/%Y %I:%M:%S %p'), reverse=True)

print(result)

代码说明
  • 用defaultdict实现按首元素分组,逻辑清晰易维护
  • 时间排序前先转成datetime对象,避免字符串直接排序的格式兼容问题
  • 组内排序后直接通过索引更新Rank值,符合需求规则
  • 额外保留了全局按时间倒序的可选逻辑,取消对应注释即可匹配你给出的预期输出顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:30:00