Как сортировать словарь со значением массива с элементами кортежей по 2 элементу python
Есть такой словарь
a = {'AL-MC': [('18/08/2020', 23), ('19/08/2020', 23), ('20/08/2020', 22), ('21/08/2020', 13), ('22/08/2020', 53), ('24/08/2020', 12)], 'BR-GS': [('18/08/2020', 23), ('19/08/2020', 23), ('20/08/2020', 34), ('21/08/2020', 67), ('22/08/2020', 45), ('24/08/2020', 15)], 'GP-RT': [('18/08/2020', 23), ('19/08/2020', 23), ('20/08/2020', 34), ('21/08/2020', 67), ('22/08/2020', 45), ('24/08/2020', 15)]}
Мне нужно отсортировать его по увеличению второго элемента кортежа т.е с самого маленького значения к самому большому игнорируя дату я пробовал это
b ={k: v for k, v in sorted(a.items(), key=lambda item: item[1][0][1])}
с разными индексами, но не получаю нужного результата. Пожалуйста объясните , где я что упускаю. В сети данных примеров найти не смог(
Ответы (1 шт):
Автор решения: Ildar
→ Ссылка
проходим по значениям словаря, и каждое значение-список из кортежей сортируем по предикату, сравнивающему вторые элементы кортежей
a = {'AL-MC': [('18/08/2020', 23), ('19/08/2020', 23), ('20/08/2020', 22), ('21/08/2020', 13), ('22/08/2020', 53), ('24/08/2020', 12)], 'BR-GS': [('18/08/2020', 23), ('19/08/2020', 23), ('20/08/2020', 34), ('21/08/2020', 67), ('22/08/2020', 45), ('24/08/2020', 15)], 'GP-RT': [('18/08/2020', 23), ('19/08/2020', 23), ('20/08/2020', 34), ('21/08/2020', 67), ('22/08/2020', 45), ('24/08/2020', 15)]}
for value in a.values():
value.sort(key=lambda tup: tup[1])
for key, value in a.items():
print(f'{key}: {value}')
вывод:
AL-MC: [('24/08/2020', 12), ('21/08/2020', 13), ('20/08/2020', 22), ('18/08/2020', 23), ('19/08/2020', 23), ('22/08/2020', 53)]
BR-GS: [('24/08/2020', 15), ('18/08/2020', 23), ('19/08/2020', 23), ('20/08/2020', 34), ('22/08/2020', 45), ('21/08/2020', 67)]
GP-RT: [('24/08/2020', 15), ('18/08/2020', 23), ('19/08/2020', 23), ('20/08/2020', 34), ('22/08/2020', 45), ('21/08/2020', 67)]