Сортировка списка словарей по двум ключам словаря
Необходимо отсортировать список словарей который приходит ответом от апи. Cписок выглядит подобным способом. Отсортировать нужно по полю date и time т.е f'{[date]} {[time]}'
['callConfirmationStatus': None,
'clientComment': None,
'clientId': 31072,
'clinicId': 1,
'coMagic': None,
'createdAt': 1635407965,
'date': '2021-11-20',
'duration': 15,
'entryTypeIds': [2686],
'id': 47251,
'note': '{{ID СДЕЛКИ: 21360756}} ',
'orderId': 39820,
'roistat': None,
'status': 'paid',
'time': '13:00',
'updatedAt': 1637399813,
'userId': 59},
{'callConfirmationStatus': None,
'clientComment': None,
'clientId': 29173,
'clinicId': 1,
'coMagic': None,
'createdAt': 1633504927,
'date': '2021-11-20',
'duration': 20,
'entryTypeIds': [2856],
'id': 44169,
'note': '{{ID СДЕЛКИ: 21098836}} ',
'orderId': 39780,
'roistat': None,
'status': 'paid',
'time': '11:00',
'updatedAt': 1637394246,
'userId': 89},
]
есть пример такой сортировки на php, но как это реализовать на python?
function date_sort($a, $b)
{
if (strtotime($a['attributes']['date'].' '.$a['attributes']['time']) == strtotime($b['attributes']['date'].' '.$b['attributes']['time'])) {
return 0;
}
return (strtotime($a['attributes']['date'].' '.$a['attributes']['time']) < strtotime($b['attributes']['date'].' '.$b['attributes']['time'])) ? -1 : 1;
}
usort($list, "date_sort");
Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
Просто надо указать функции сортировки данные по каким необходимо сортировать.
#data = [{...}, {...}]
result = sorted(data, key=lambda item: (item["date"], item["time"]))
Или прямо в исходном списке (инлайн), если нет необходимости его сохранять.
data.sort(key=lambda item: (item["date"], item["time"]))