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

Python按指定日期格式对元组列表降序排序出错问题

解决元组列表按日期降序排序的问题

我来帮你排查代码里的问题,顺便给出能达到预期效果的实现方案:

你的代码存在的几个关键问题:

  1. list.sort()返回None:sort()是列表的原地排序方法,它会直接修改原列表本身,不会返回排序后的新列表——这就是你得到None的核心原因。
  2. 多余的排序操作:你先调用了my_array.sort(key=operator.itemgetter(1)),这会先按元组的第二个元素(linkA/linkB这类链接字段)排序,后续的sort操作会覆盖这次排序结果,但这一步完全是不必要的。
  3. 缺少降序参数:默认sort和sorted()都是升序排序逻辑,而你需要的是从新到旧的降序排列,所以必须添加reverse=True参数。

正确的实现方式

推荐使用sorted()函数,它会返回一个全新的排序后的列表,不会修改原列表,用法更灵活直观:

import datetime

def newest_results(my_array):
    # 按元组第4个元素(日期字符串)转换为datetime对象后,执行降序排序
    return sorted(my_array, key=lambda x: datetime.strptime(x[3], '%d %B %Y'), reverse=True)

# 测试你的输入列表
my_list = [("234","linkA" ,"FileA" , "23 March 2017"), ("541", "linkB", "FileB", "12 October 2019"), ("9482", "linkC", "FIleC","24 February 2018")]
my_ordered_list = newest_results(my_list)
print(my_ordered_list)

如果一定要用sort()(原地修改原列表),可以这样调整:

import datetime

def newest_results(my_array):
    # 直接对原列表原地排序,注意sort返回None,所以要手动返回原列表
    my_array.sort(key=lambda x: datetime.strptime(x[3], '%d %B %Y'), reverse=True)
    return my_array

最终输出结果

运行代码后会得到你期望的排序结果:

[("541", "linkB", "FileB", "12 October 2019"), ("9482", "linkC", "FIleC","24 February 2018"), ("234","linkA" ,"FileA" , "23 March 2017")]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:56:09