按升序排序日期列表,而不涉及其他元素

时间:2017-11-16 05:09:24

标签: python python-2.7 sorting date

这是清单:

[['2017-11-09', 21], ['2017-11-14', 39], ['2017-11-13', 43], ['2017-11-10', 37]]

这必须是输出:

[['2017-11-09', 21], ['2017-11-10', 37], ['2017-11-13', 43], ['2017-11-14', 39]]

我如何在Python中执行此操作?

3 个答案:

答案 0 :(得分:0)

您也可以使用

list = [['2017-11-09', 21], ['2017-11-14', 39], ['2017-11-13', 43], ['2017-11-10', 37]]
list.sort()
print(list)

答案 1 :(得分:0)

下面,

>>> l
[['2017-11-09', 21], ['2017-11-14', 39], ['2017-11-13', 43], ['2017-11-10', 37], ['2017-11-09', 100], ['2017-11-09', 1]]

使用sorted对字符串而不是日期进行排序,并考虑子列表的所有项目

>>> sorted(l) 
[['2017-11-09', 1], ['2017-11-09', 21], ['2017-11-09', 100], ['2017-11-10', 37], ['2017-11-13', 43], ['2017-11-14', 39]]

但我们只需要考虑第一项(dateobject)

>>> sorted(l,key=lambda x:datetime.strptime(x[0],'%Y-%m-%d')) 
[['2017-11-09', 21], ['2017-11-09', 100], ['2017-11-09', 1], ['2017-11-10', 37], ['2017-11-13', 43], ['2017-11-14', 39]]

甚至更简单,

>>> from operator import itemgetter
>>> sorted(l,key=itemgetter(0))
[['2017-11-09', 21], ['2017-11-09', 100], ['2017-11-09', 1], ['2017-11-10', 37], ['2017-11-13', 43], ['2017-11-14', 39]]

答案 2 :(得分:0)

您可以使用itemgetter获得更通用的解决方案。

>>> from operator import itemgetter
>>> ls = [['2017-11-09', 21], ['2017-11-14', 39], ['2017-11-13', 43], ['2017-11-10', 37]]
>>> sorted(ls, key=itemgetter(0))