【问题标题】:Python 3 - sorting list of dates in string format in different form (with time and without) [duplicate]Python 3 - 以不同形式(带时间和不带时间)以字符串格式对日期列表进行排序[重复]
【发布时间】:2016-08-18 01:34:57
【问题描述】:

我正在尝试对字符串格式的日期列表进行排序,但每个日期的格式都不同,如下所示:

lst = ['11/04/2016, 23:55', '15/11/2014', '04/05/2016, 23:55', '24/11/2013, 12:30', '31/12/2015']

我尝试了以下排序:

lst.sort(key=lambda date: datetime.strptime(date, "%d/%m/%Y, %H:%M"))

但是由于我不知道日期将如何(有或没有特定时间)我被卡住了。我想不出一个通用条件来排序这个列表,如果它我需要保持准确的时间给出(即我不想拆分字符串,只取, 之前的内容)。

请帮忙:(

【问题讨论】:

    标签: python string sorting date python-3.x


    【解决方案1】:

    您可以在关键函数中使用if-else 语句:

    >>> lst.sort(key=lambda d: datetime.strptime(d, "%d/%m/%Y, %H:%M") if ':' in d else datetime.strptime(d, "%d/%m/%Y"))
    >>> lst
    ['24/11/2013, 12:30', '15/11/2014', '31/12/2015', '11/04/2016, 23:55', '04/05/2016, 23:55']
    >>> 
    

    如果您可能有超过 2 种日期格式,您可以在非内联函数中处理多个状态。

    def key_func(dat):
        if ':' in dat:
            return datetime.strptime(d, "%d/%m/%Y, %H:%M")
        elif cond2: 
            # return val2
        elif cond3:
            # return val3
    

    【讨论】:

    • 非常感谢!!我不知道您可以在 lambda 函数中添加条件,这正是我所需要的。谢谢!
    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 2018-05-29
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 2020-05-29
    • 2021-06-23
    相关资源
    最近更新 更多