2013-07-13 120 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']