Найти - Пользователи
Полная версия: Сортировка списка словарей по дате
Начало » Python для новичков » Сортировка списка словарей по дате
1
Temp
Доброго времени суток!

Пользуюсь 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’ есть еще куча ключей если это важно)
rami
 def sorting(meta):
    return sorted(meta, key=lambda k: '.'.join(reversed(k['date'].split('.'))))
Temp
rami
Спасибо огромное!

Если не сложно, объясните пожалуйста, как это работает?
rami
Для правильной сортировки формат даты должен быть “YYYY.MM.DD”, для этого даты в вашем формате “02.06.2020” нужно разбить по разделителю, “развернуть” и снова “склеить”.
py.user.next
  
>>> 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
>>>
Rodegast
> “развернуть” и снова “склеить”

Склеивать зачем? Списки вполне себе можно сравнивать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB