Подтвердить что ты не робот

Сортировка списка строк даты

У меня есть произвольный список строк даты (mm-yyyy) следующим образом:

d = ['09-2012', '04-2007', '11-2012', '05-2013', '12-2006', '05-2006', '08-2007'...]

Мне нужно, чтобы этот список сортировался сначала по уровню лет (возрастанию), затем по уровню месяцев (по возрастанию).. так что логический порядок может быть:

d_ordered = ['05-2006', '12-2006', '04-2007', '08-2007', '09-2012', '11-2012', '05-2013' ...]

Как я могу это достичь?

4b9b3361

Ответ 1

Попробуйте следующее:

import datetime
d = ['09-2012', '04-2007', '11-2012', '05-2013', '12-2006', '05-2006', '08-2007']
sorted(d, key=lambda x: datetime.datetime.strptime(x, '%m-%Y'))

Ответ 2

Используйте sorted() с помощью клавиши:

>>> d = ['09-2012', '04-2007', '11-2012', '05-2013', '12-2006', '05-2006', '08-2007']
>>> def sorting(L):
...     splitup = L.split('-')
...     return splitup[1], splitup[0]
... 
>>> sorted(d, key=sorting)
['05-2006', '12-2006', '04-2007', '08-2007', '09-2012', '11-2012', '05-2013']

Лучше использовать здесь функцию вместо лямбда для предотвращения вызова split() дважды (и это выглядит немного опрятно:))

Обратите внимание, что это вернет отсортированный список. Если вы хотите отсортировать его на месте, используйте .sort():

>>> d.sort(key=sorting)
>>> d
['05-2006', '12-2006', '04-2007', '08-2007', '09-2012', '11-2012', '05-2013']