2015-08-07 5 views
1

У меня есть список с датой в форме для человека и форматом даты, я пытаюсь сортировать даты.Сортировка по дате Список Python

не возвращается правильный заказ.

d = ["[email protected], Aug 10, 2015", "[email protected], Aug 11, 2015", "[email protected], Aug 12, 2015","[email protected], Aug 13, 2015", "[email protected], Aug 14, 2015", "[email protected], Aug 07, 2015", "[email protected], Aug 08, 2015", "[email protected], Aug 09, 2015"] 
>>> def sorting(L): 
...  splitup = L.split('-') 
...  return splitup[1], splitup[0] 
... 
>>> sorted(d, key=sorting) 
['[email protected], Aug 10, 2015', '[email protected], Aug 11, 2015', '[email protected], Aug 12, 2015', '[email protected], Aug 13, 2015', '[email protected], Aug 14, 2015', '[email protected], Aug 07, 2015', '[email protected], Aug 08, 2015', '[email protected], Aug 09, 2015'] 

ответ

1

Вы можете использовать time.strptime

>>> from time import strptime 
>>> sorted(d, key = lambda i: strptime(i.split('@')[0], '%d-%m-%Y')) 
['[email protected], Aug 07, 2015', 
'[email protected], Aug 08, 2015', 
'[email protected], Aug 09, 2015', 
'[email protected], Aug 10, 2015', 
'[email protected], Aug 11, 2015', 
'[email protected], Aug 12, 2015', 
'[email protected], Aug 13, 2015', 
'[email protected], Aug 14, 2015'] 

В принципе, вы можете разделить на '@' характер, то все ваши строки могут быть использованы для создания struct_time объектов. Вы можете использовать лямбда в аргументе keysorted, чтобы отсортировать по этим struct_time объектам.

Также обратите внимание, что вы можете изменить порядок сортировки, используя reverse аргумент

>>> sorted(d, key = lambda i: strptime(i.split('@')[0], '%d-%m-%Y'), reverse=True) 
['[email protected], Aug 14, 2015', 
'[email protected], Aug 13, 2015', 
'[email protected], Aug 12, 2015', 
'[email protected], Aug 11, 2015', 
'[email protected], Aug 10, 2015', 
'[email protected], Aug 09, 2015', 
'[email protected], Aug 08, 2015', 
'[email protected], Aug 07, 2015']