Как отсортировать список сначала по дате, а затем по времени в Python? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть список, содержащий объекты 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 февраля. Мне нужна первая (самая старая) запись на 21 февраля, это datetime.datetime(2019, 2, 21, 14, 7, 42, 111000). Я попытался использовать сортировку (список), но поскольку мое значение где-то падает посередине, оно мне не помогает.

Каков наилучший способ получить это в Python?

1 Ответ

0 голосов
/ 08 мая 2019

Использование itertools.groupby

Ex:

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
...