python排序字典列表,日期字符串列表

2024-06-17 11:12:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含日期和时间字符串的字典列表(来自JSON)

[{"time": "17:00", "foo": "bar", "date": "01.02.20"}, {"time": "17:00", "foo": "bar", "date": "15.01.20"}, ...

日期的格式如下:%d.%m.%y,时间:%H:%m

我当前的代码:

    def sortJSON(self, lis, dateKey, timeKey):
      if timeKey:
        return sorted(lis, key = lambda i: (i[dateKey], i[timeKey]))
      return sorted(lis, key = lambda i: i[dateKey])

但是,由于日期是字符串且格式为%d.%m.%y,因此未正确排序。 是否有一种优雅的方式将我当前的代码与以下内容结合起来:

Sort list of date strings

换句话说,传入一个附加函数以将值作为日期处理


Tags: lambdakey字符串代码datereturnfootime
3条回答

您可以将日期转换为datetime.datetime对象进行比较:

from datetime import datetime

def sortJSON(self, lis, dateKey, timeKey):
    return sorted(lis, key=lambda i: (datetime.strptime(i[dateKey], '%d.%m.%y'), i.get(timeKey)))

您非常接近,需要将string日期转换为datetime对象,以便python可以根据时间比较这些对象,这将起作用:

from datetime import datetime

d = [{"time": "17:00", "foo": "bar", "date": "01.02.20"}, {"time": "17:00", "foo": "bar", "date": "15.01.20"}]

sorted_dates = sorted(d, key=lambda date: datetime.strptime(date['time'] + ' ' + date['date'], '%H:%M %d.%m.%y'))
print(sorted_dates)

>>> [{'time': '17:00', 'foo': 'bar', 'date': '15.01.20'}, {'time': '17:00', 'foo': 'bar', 'date': '01.02.20'}]
def sortIt(key):
    from datetime import datetime
    thelist = [{"date": '30.10.2020'},
            {"date": '30.01.2020'},
            {"date": '30.06.2020'},
            {"date": '17.01.2012'},
            {"date": '25.04.2020'},
            {"date": '03.02.2016'}]
    # Unsorted
    print("   -Unsorted   ")
    print(thelist)
    print("   -Sorted   ")
    x = sorted(thelist, key = lambda i : datetime.strptime(i.get(key), "%d.%m.%Y"))
    print(x)

sortIt('date')

相关问题 更多 >