2013-07-13 16 views
15

Mam dowolną listę łańcuchach daty (mm-rrrr) w następujący sposób:Sortuj lista łańcuchach daty

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

muszę do tej listy należy najpierw sortowane według poziomu lat (rosnąco), a następnie na poziom miesięcy (rosnąco) .. aby logiczne porządkowanie mogło być:

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

Jak mogę to osiągnąć?

+3

szybki i brudny: 'd.sort (klucz = lambda x: x.split ('-') [:: - 1]) " –

Odpowiedz

34

Spróbuj:

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')) 
5

Zastosowanie sorted() z kluczem:

>>> 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'] 

Lepiej użyć funkcji tutaj zamiast lambda aby zapobiec nazywając split() dwa razy (i to wygląda trochę neater :))

pamiętać, że ta zwróci posortowaną listę. Jeśli chcesz, aby posortować je w miejscu, użyj .sort():

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