39

我有一个任意日期字符串列表(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' ...]

我怎样才能做到这一点?

4

2 回答 2

69

尝试这个:

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'))
于 2013-07-13T06:20:47.120 回答
11

与键一起使用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']

最好在这里使用函数而不是 lambda 来防止调用split()两次(而且看起来更整洁:))

请注意,这将返回排序列表。如果要对其进行排序,请使用.sort()

>>> d.sort(key=sorting)
>>> d
['05-2006', '12-2006', '04-2007', '08-2007', '09-2012', '11-2012', '05-2013']
于 2013-07-13T06:14:42.753 回答