Как отсортировать словарь по значению?
Есть словарь {'a': 3, 'b': 1, 'c': 2}. Нужно получить его отсортированным по значениям (по возрастанию и по убыванию). Как?
4 ответа
Через sorted с key:
d = {'a': 3, 'b': 1, 'c': 2}
# по возрастанию значений -> новый dict
res = dict(sorted(d.items(), key=lambda x: x[1]))
# {'b': 1, 'c': 2, 'a': 3}
# по убыванию
res = dict(sorted(d.items(), key=lambda x: x[1], reverse=True))
d.items() даёт пары (ключ, значение), а lambda x: x[1] говорит сортировать по второму элементу пары — по значению. Оборачиваем обратно в dict, потому что словари с 3.7 хранят порядок вставки.
dict(sorted(d.items(), key=lambda x: x[1])).
Если нужен только топ-N по значению, удобнее collections.Counter и его .most_common(n) — он сразу отдаёт пары, отсортированные по убыванию.
my_dict = {'apple': 5, 'banana': 2, 'cherry': 8, 'date': 3}
По значению (возрастание)
sorted_dict = dict(sorted(my_dict.items(), key=lambda x: x[1])) print(sorted_dict) # {'banana': 2, 'date': 3, 'apple': 5, 'cherry': 8}
По значению (убывание)
sorted_dict = dict(sorted(my_dict.items(), key=lambda x: x[1], reverse=True)) print(sorted_dict) # {'cherry': 8, 'apple': 5, 'date': 3, 'banana': 2}
По ключу (если вдруг понадобится)
sorted_dict = dict(sorted(my_dict.items(), key=lambda x: x[0])) print(sorted_dict) # {'apple': 5, 'banana': 2, 'cherry': 8, 'date': 3}