← Все вопросы

Как отсортировать словарь по значению?

Задан 8 месяцев назад1.5к просмотров4 ответа
22

Есть словарь {'a': 3, 'b': 1, 'c': 2}. Нужно получить его отсортированным по значениям (по возрастанию и по убыванию). Как?

4 ответа

31
✓ Принятый ответ — помог автору

Через 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 хранят порядок вставки.

Кирилл Борисов лямбда x[1] наконец встала на место в голове, спасибо 🙏 · 8 месяцев назад
8

dict(sorted(d.items(), key=lambda x: x[1])).

5

Если нужен только топ-N по значению, удобнее collections.Counter и его .most_common(n) — он сразу отдаёт пары, отсортированные по убыванию.

0

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}

Ваш ответ

Войдите, чтобы ответить на вопрос.