排序日期字符串列表

use*_*542 25 python datetime

我有一个任意的日期字符串列表(mm-yyyy)如下:

d = ['09-2012', '04-2007', '11-2012', '05-2013', '12-2006', '05-2006', '08-2007'...]
Run Code Online (Sandbox Code Playgroud)

我需要先将这个列表按年级(升序)排序,然后按月(升序)等级排序.这样逻辑排序可以是:

d_ordered = ['05-2006', '12-2006', '04-2007', '08-2007', '09-2012', '11-2012', '05-2013' ...]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

ama*_*nes 46

试试这个:

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'))
Run Code Online (Sandbox Code Playgroud)

  • 使用reverse= True 进行降序 `sorted(d, key=lambda x: datetime.datetime.strptime(x, '%m-%Y'), reverse=True)` (2认同)

Ter*_*ryA 8

使用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']
Run Code Online (Sandbox Code Playgroud)

最好在这里使用一个函数而不是lambda来防止调用split()两次(它看起来有点整洁:))

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

>>> d.sort(key=sorting)
>>> d
['05-2006', '12-2006', '04-2007', '08-2007', '09-2012', '11-2012', '05-2013']
Run Code Online (Sandbox Code Playgroud)