首先按年份排序列表,然后再按月份排序。

3

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

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

然而,我无法找到一种方法来按月份排序,同时保持年份的升序。

1
尝试传递一个元组。 - Anton vBR
@jonrsharpe:没有int,月份中的10会排在9之前。 - fuglede
@fuglede 说得好,但是只需要转换月份,OP目前的代码没有任何好处。 - jonrsharpe
2个回答

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
谢谢,我使用了第一个,因为它更符合我的代码,并且似乎更符合Python的风格。 - Robert C
1
不客气。第二个更符合Python风格。 - Anton vBR

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接