Ответ 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'))
У меня есть произвольный список строк даты (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' ...]
Как я могу это достичь?
Попробуйте следующее:
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'))
Используйте 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']