首页 > 解决方案 > 将日期包含为字符串的排序列表

问题描述

我有以下列表

data = ['Sep 14, 2020', 'Sep 10, 2020', 'Sep 6, 2020', 'Aug 28, 2020', 
    'Aug 25, 2020', 'Aug 31, 2020', 'Aug 30, 2020', 'Aug 17, 2020', 
     'Nov 12, 2020', 'Dec 3, 2020', 'Dec 17, 2020', 'Dec 28, 2020', 'Dec 31, 2020']

如果元素中的日期将该元素设置在另一个元素之后,我已经尝试循环和匹配,但我无法让它工作

我想从一月的第一个月到十二月的上个月对列表进行排序,但我什至不知道从哪里开始

标签: pythonlistsortingdatetime

解决方案


中的元素data是字符串,因此如果您sort在列表上运行,它将按字母顺序排序。

sort考虑到它们是日期,您可以告诉函数对它们进行排序。为此,您需要datetime.strptime像这样转换它们(在此处datetime.strptime(element, '%b %d, %Y')阅读更多信息)strptime

所以你的排序功能变成:

data = ['Sep 14, 2020', 'Sep 10, 2020', 'Sep 6, 2020', 'Aug 28, 2020', 'Aug 25, 2020', 'Aug 31, 2020', 'Aug 30, 2020', 'Aug 17, 2020', 'Nov 12, 2020', 'Dec 3, 2020', 'Dec 17, 2020', 'Dec 28, 2020', 'Dec 31, 2020']

data.sort(key=lambda date: datetime.strptime(date, '%b %d, %Y'))
print(data)

输出:

['Aug 17, 2020', 'Aug 25, 2020', 'Aug 28, 2020', 'Aug 30, 2020', 'Aug 31, 2020', 'Sep 6, 2020', 'Sep 10, 2020', 'Sep 14, 2020', 'Nov 12, 2020', 'Dec 3, 2020', 'Dec 17, 2020', 'Dec 28, 2020', 'Dec 31, 2020']

推荐阅读