【问题标题】:Sorting a list of dates in ascending order, without concerning the other element按升序对日期列表进行排序,而不涉及其他元素
【发布时间】:2017-11-16 05:09:24
【问题描述】:

这是列表:

[['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 中做到这一点?

【问题讨论】:

  • 你可以使用 sorted([['2017-11-09', 21], ['2017-11-14', 39], ['2017-11-13', 43], ['2017-11-10', 37]])
  • 就这么简单!尝试了很多其他方法。谢谢!

标签: python python-2.7 sorting date


【解决方案1】:

你也可以用这个

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

【讨论】:

    【解决方案2】:

    这里,

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

    但我们只需要考虑第一项(日期对象)

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

    【讨论】:

      【解决方案3】:

      您可以使用 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))
      

      【讨论】:

        猜你喜欢
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 2016-02-01
        • 2014-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多