Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 日期字符串的排序列表_Python_Datetime - Fatal编程技术网

Python 日期字符串的排序列表

Python 日期字符串的排序列表,python,datetime,Python,Datetime,我有一个任意的日期字符串列表(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

我有一个任意的日期字符串列表(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' ...]
如何实现这一点?

使用钥匙:

>>> 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()

试试这个:

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'))

快速脏:
d.sort(key=lambda x:x.split('-')[:-1])
使用reverse=True进行降序排序
sorted(d,key=lambda x:datetime.datetime.strtime(x,%m-%Y'),reverse=True)
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'))