我有一个任意的日期字符串列表(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' ...]
我怎样才能做到这一点?
答案 0 :(得分:43)
试试这个:
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'))
答案 1 :(得分:7)
将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']