python сортировка списка словарей из строк с датой - PullRequest
0 голосов
/ 14 января 2020

У меня есть список словарей (из 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, они отсортированы неправильно. Существует ли элегантный способ объединения моего текущего кода с чем-то вроде этого:

Сортировка списка строк дат

Другими словами, передача дополнительной функции для обработки значения как даты?

Ответы [ 3 ]

2 голосов
/ 14 января 2020

Вы можете преобразовать даты в 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)))
2 голосов
/ 14 января 2020

Вы были довольно близко, вам нужно конвертировать 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'}]
0 голосов
/ 14 января 2020
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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...