2013-07-13 15 views
15

次のように私は日付文字列(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' ...] 

私はこれをどのように達成できますか?キーで

+3

クイックや汚れ: 'd.sort(キー=ラムダX:x.split( ' - ') [:: - 1]) ' –

答えて

34

このお試しください:

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

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