按年排序列表,然后按月排序

时间:2017-12-17 09:34:53

标签: python python-3.x list sorting

我有一个列表,看起来像这样:

dateList = [['2014', '4'], ['2015', '6'], ['2017', '6'], ['2016', '2'], ['2016', '3'], ['2017', '9'], ['2016', '6'], ['2017', '3'], ['2014', '8'], ['2014', '10'], ['2017', '10'], ['2014', '9'], ['2014', '3'], ['2015', '11'], ['2015', '2']]

我一直试图按年份排序,然后按月计算。我使用

成功地按年分类
sortedList = sorted(dateList, key = lambda x: int(x[0]))

然而,我无法想出一种方法可以按月对其进行排序,同时保持年份按升序排列。

2 个答案:

答案 0 :(得分:5)

传递一个元组:

sorted(dateList, key = lambda x: (int(x[0]),int(x[1])))

但这看起来更好:

sorted(dateList, key = lambda x: tuple(map(int,x)))

另一种选择可能是使用:

import datetime 
sorted(dateList, key = lambda x: datetime.datetime.strptime(''.join(x),'%Y%m'))

答案 1 :(得分:3)

您似乎需要对数据进行自然分类。您可以使用natsort包执行此操作,而无需传递密钥 -

import natsort

natsort.natsorted(dateList)

[['2014', '3'],
 ['2014', '4'],
 ['2014', '8'],
 ['2014', '9'],
 ['2014', '10'],
 ['2015', '2'],
 ['2015', '6'],
 ['2015', '11'],
 ['2016', '2'],
 ['2016', '3'],
 ['2016', '6'],
 ['2017', '3'],
 ['2017', '6'],
 ['2017', '9'],
 ['2017', '10']]