Python按指定日期格式对元组列表降序排序出错问题
解决元组列表按日期降序排序的问题
我来帮你排查代码里的问题,顺便给出能达到预期效果的实现方案:
你的代码存在的几个关键问题:
list.sort()返回None:sort()是列表的原地排序方法,它会直接修改原列表本身,不会返回排序后的新列表——这就是你得到None的核心原因。- 多余的排序操作:你先调用了
my_array.sort(key=operator.itemgetter(1)),这会先按元组的第二个元素(linkA/linkB这类链接字段)排序,后续的sort操作会覆盖这次排序结果,但这一步完全是不必要的。 - 缺少降序参数:默认
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
相关产品推荐
相关产品推荐

