【问题标题】:How to sort a list first by date and then by time in Python?如何在Python中先按日期然后按时间对列表进行排序?
【发布时间】:2019-09-25 23:21:29
【问题描述】:

我有一个列表,其中包含来自数据库的 DateTime 对象。我需要首先按日期对其进行排序并取最新日期,对于最新日期,我需要取第一个条目,即最旧的条目。例如,下面是我的清单:

import datetime

values = [datetime.datetime(2019, 2, 6, 10, 30, 28, 970000),
          datetime.datetime(2019, 2, 6, 10, 30, 31, 308000),
          datetime.datetime(2019, 2, 21, 14, 7, 42, 111000),
          datetime.datetime(2019, 2, 21, 14, 7, 59, 160000),
          datetime.datetime(2019, 2, 21, 14, 8, 12, 143000),
          datetime.datetime(2019, 2, 21, 14, 8, 15, 234000)]

我有 2 月 6 日和 2 月 21 日的条目。我需要 2 月 21 日的第一个(最旧的)条目,即 datetime.datetime(2019, 2, 21, 14, 7, 42, 111000)。我曾尝试使用 sorted(list),但由于我的值处于中间位置,它对我没有帮助。

在 Python 中最好的方法是什么?

【问题讨论】:

    标签: python-3.x sorting datetime python-datetime


    【解决方案1】:

    使用itertools.groupby

    例如:

    import datetime
    from itertools import groupby
    
    data = [datetime.datetime(2019, 2, 6, 10, 30, 28, 970000), datetime.datetime(2019, 2, 6, 10, 30, 31, 308000), datetime.datetime(2019, 2, 21, 14, 7, 42, 111000), datetime.datetime(2019, 2, 21, 14, 7, 59, 160000), datetime.datetime(2019, 2, 21, 14, 8, 12, 143000), datetime.datetime(2019, 2, 21, 14, 8, 15, 234000)]
    new_data = [list(v) for _, v in groupby(sorted(data), lambda x: x.strftime("%Y%m%d"))]       #GroupBy YearMonthDay
    print(new_data[-1][0])   #latest date, first entry 
    

    输出:

    2019-02-21 14:07:42.111000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 2019-01-16
      • 2022-01-24
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多