Сортировка даты и времени возражает при игнорировании года?

У меня есть список дней рождения, сохраненных в datetime объекты. Как можно было бы пойти о сортировке их в Python с помощью только month и day аргументы?

Например,

[
    datetime.datetime(1983, 1, 1, 0, 0)
    datetime.datetime(1996, 1, 13, 0 ,0)
    datetime.datetime(1976, 2, 6, 0, 0)
    ...
]

Спасибо! :)

8
задан Bryan Veloso 12 January 2010 в 07:49
поделиться

3 ответа

Вы можете использовать месяц и день , чтобы создать значение, которое можно использовать для сортировки:

birthdays.sort(key = lambda d: (d.month, d.day))
13
ответ дан 5 December 2019 в 07:11
поделиться
l.sort(key = lambda x: x.timetuple()[1:3])
7
ответ дан 5 December 2019 в 07:11
поделиться

Если даты хранятся в виде строк - вы говорите, что нет, хотя похоже, что они - вы можете Использование DateutiL SANSER:

>>> from dateutil.parser import parse
>>> from pprint import pprint
>>> bd = ['February 6, 1976','January 13, 1996','January 1, 1983']
>>> bd = [parse(i) for i in bd]
>>> pprint(bd)
[datetime.datetime(1976, 2, 6, 0, 0), 
 datetime.datetime(1996, 1, 13, 0, 0), 
 datetime.datetime(1983, 1, 1, 0, 0)]
>>> bd.sort(key = lambda d: (d.month, d.day)) # from sth's answer
>>> pprint(bd)
[datetime.datetime(1983, 1, 1, 0, 0),
 datetime.datetime(1996, 1, 13, 0, 0),
 datetime.datetime(1976, 2, 6, 0, 0)]

Если ваши даты находятся в разных форматах, вы можете дать нечеткому разбору выстрел:

>>> bd = [parse(i,fuzzy=True) for i in bd] # replace line 4 above with this line
3
ответ дан 5 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: