Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 13, 2021 19:40:58

Temp
Зарегистрирован: 2021-01-16
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

Сортировка списка словарей по дате

Доброго времени суток!

Пользуюсь Python 3

имеется следующий список:

 config = [
{'name': 'Paris', 'date': '02.06.2020'},
{'name': 'London', 'date': '20.06.2020'},
{'name': 'Paris', 'date': '05.08.2019'},
{'name': 'Paris', 'date': '09.06.2021'},
{'name': 'New York', 'date': '03.01.2021'},
{'name': 'Barcelona', 'date': '16.11.2021'},
{'name': 'Paris', 'date': '28.04.2019'}
]

Добавил следующую функцию для сортировки по дате:
     def sorting(self, meta):
        temp =   sorted(meta, key=lambda k: k['date'].split('.')[2])
        temp = sorted(temp, key=lambda k: k['date'].split('.')[1])
        return sorted(temp, key=lambda k: k['date'].split('.')[0])

И вы уже поняли что это не работает))) Каждая следующая сортировка сводит на нет предыдущую.
Вопрос вполне логический, как отсортировать список сразу по двум и более условиям.
Ну или как отсортировать конкретно эту ситуацию.
(в каждом из словарей помимо ключей ‘name’ и ‘date’ есть еще куча ключей если это важно)

Офлайн

#2 Фев. 13, 2021 20:39:42

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

Сортировка списка словарей по дате

 def sorting(meta):
    return sorted(meta, key=lambda k: '.'.join(reversed(k['date'].split('.'))))

Офлайн

#3 Фев. 13, 2021 21:14:24

Temp
Зарегистрирован: 2021-01-16
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

Сортировка списка словарей по дате

rami
Спасибо огромное!

Если не сложно, объясните пожалуйста, как это работает?

Офлайн

#4 Фев. 13, 2021 23:31:11

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

Сортировка списка словарей по дате

Для правильной сортировки формат даты должен быть “YYYY.MM.DD”, для этого даты в вашем формате “02.06.2020” нужно разбить по разделителю, “развернуть” и снова “склеить”.

Офлайн

#5 Фев. 13, 2021 23:41:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9880
Репутация: +  853  -
Профиль   Отправить e-mail  

Сортировка списка словарей по дате

  
>>> config = [
...     {'name': 'Paris', 'date': '02.06.2020'},
...     {'name': 'London', 'date': '20.06.2020'},
...     {'name': 'Paris', 'date': '05.08.2019'},
...     {'name': 'Paris', 'date': '09.06.2021'},
...     {'name': 'New York', 'date': '03.01.2021'},
...     {'name': 'Barcelona', 'date': '16.11.2021'},
...     {'name': 'Paris', 'date': '28.04.2019'}
... ]
>>> 
>>> out = sorted(config, key=lambda i: tuple(map(int, i['date'].split('.')))[::-1])
>>> out
[{'name': 'Paris', 'date': '28.04.2019'}, {'name': 'Paris', 'date': '05.08.2019'}, {'name': 'Paris', 'date': '02.06.2020'}, {'name': 'London', 'date': '20.06.2020'}, {'name': 'New York', 'date': '03.01.2021'}, {'name': 'Paris', 'date': '09.06.2021'}, {'name': 'Barcelona', 'date': '16.11.2021'}]
>>> 

Сравнивать надо числа, иначе бывает такое
  
>>> '01.01.20' > '01.01.100'
True
>>>



Отредактировано py.user.next (Фев. 13, 2021 23:44:58)

Офлайн

#6 Фев. 14, 2021 12:30:32

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2756
Репутация: +  184  -
Профиль   Отправить e-mail  

Сортировка списка словарей по дате

> “развернуть” и снова “склеить”

Склеивать зачем? Списки вполне себе можно сравнивать.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version