如何在Python中先按日期然后按时间对列表进行排序?

时间:2019-05-08 09:03:02

标签: python-3.x sorting datetime python-datetime

我有一个列表,其中包含来自数据库的DateTime对象。我需要先按日期对它进行排序并采用最新日期,对于最新日期,我需要采用第一个条目,即最早的条目。示例,下面是我的列表:

import datetime

values = [datetime.datetime(2019, 2, 6, 10, 30, 28, 970000),
          datetime.datetime(2019, 2, 6, 10, 30, 31, 308000),
          datetime.datetime(2019, 2, 21, 14, 7, 42, 111000),
          datetime.datetime(2019, 2, 21, 14, 7, 59, 160000),
          datetime.datetime(2019, 2, 21, 14, 8, 12, 143000),
          datetime.datetime(2019, 2, 21, 14, 8, 15, 234000)]

我有6月和21日的条目。我需要2月21日的第一个(最旧的)条目是datetime.datetime(2019, 2, 21, 14, 7, 42, 111000)。我曾尝试使用sorted(list),但由于我的价值介于中间,因此无济于事。

Python最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

使用itertools.groupby

例如:

import datetime
from itertools import groupby

data = [datetime.datetime(2019, 2, 6, 10, 30, 28, 970000), datetime.datetime(2019, 2, 6, 10, 30, 31, 308000), datetime.datetime(2019, 2, 21, 14, 7, 42, 111000), datetime.datetime(2019, 2, 21, 14, 7, 59, 160000), datetime.datetime(2019, 2, 21, 14, 8, 12, 143000), datetime.datetime(2019, 2, 21, 14, 8, 15, 234000)]
new_data = [list(v) for _, v in groupby(sorted(data), lambda x: x.strftime("%Y%m%d"))]       #GroupBy YearMonthDay
print(new_data[-1][0])   #latest date, first entry 

输出:

2019-02-21 14:07:42.111000