我有一个列表,其中包含来自数据库的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最好的方法是什么?
答案 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