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