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

Узнайте, как сортировать словарь Python по его значениям. Откройте для себя сортировку с использованием sorted(), пользовательских лямбда-выражений ключей и создание упорядоченных структур dict.

Попробуйте это решение в редакторе

Обзор

Хотя словари в первую очередь созданы для операций быстрого поиска с использованием уникальных ключей, вам часто придется сортировать элементы словаря на основе их значений. Например, можно сортировать студентов по экзаменационным оценкам, перечислять продукты от самых дешевых до самых дорогих или упорядочивать количество слов по частоте.

В Python вы не можете напрямую сортировать словарь на месте, поскольку стандартные структуры словарей не поддерживают такие методы упорядочивания, как списки. Вместо этого стандартный подход состоит в том, чтобы получить элементы словаря в виде кортежей с помощью метода .items(), отсортировать эти кортежи с помощью встроенной функции sorted() с пользовательским ключом сортировки, а затем перестроить словарь из отсортированных элементов.

Ключом сортировки обычно является лямбда-функция, которая возвращает второй элемент кортежа (значение словаря): `key=lambda item: item[1]`. Начиная сPython 3.7+, стандартные словари сохраняют порядок вставки. Повторное преобразование отсортированного списка кортежей обратно в словарь с помощью конструктора dict() возвращает чистый, отсортированный словарь, готовый к итерации.

Код и вывод выполнения

Этот скрипт демонстрирует сортировку словаря результатов тестов по значениям как в порядке возрастания, так и в порядке убывания с использованием лямбда-функций.

scores = {"Alice": 88, "Bob": 75, "Charlie": 95, "David": 82}
print("Original dictionary:", scores)

# 1. Sort by values (ascending order)
sorted_ascending = dict(sorted(scores.items(), key=lambda item: item[1]))
print("Sorted ascending:", sorted_ascending)

# 2. Sort by values (descending order)
sorted_descending = dict(sorted(scores.items(), key=lambda item: item[1], reverse=True))
print("Sorted descending:", sorted_descending)

# 3. sorting by keys for comparison
sorted_keys = dict(sorted(scores.items(), key=lambda item: item[0]))
print("Sorted by keys:", sorted_keys)
Терминальный выход
Original dictionary: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}
Sorted ascending: {'Bob': 75, 'David': 82, 'Alice': 88, 'Charlie': 95}
Sorted descending: {'Charlie': 95, 'Alice': 88, 'David': 82, 'Bob': 75}
Sorted by keys: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}

Пошаговая реализация

  • Вызовите my_dict.items(), чтобы получить пары ключ-значение в виде списка кортежей.
  • Передайте элементы словаря в функцию sorted().
  • Укажите key=lambda item: item[1], чтобы указать функции sorted() выполнять сортировку на основе значения (второй элемент каждого кортежа).
  • Передайтеverse=True в качестве необязательного аргумента для сортировки элементов в порядке убывания.
  • Перестройте отсортированный словарь, передав отсортированный список кортежей конструктору dict().

Часто задаваемые вопросы

Что означает key=lambda item: item[1]?

Функция sorted() передает каждый элемент последовательности элементов (кортеж (ключ, значение)) в лямбда-функцию. item[1] извлекает компонент значения, сообщая Python отсортировать кортежи по значению.

Влияет ли сортировка словаря на скорость поиска ключей?

Нет, поиск ключей остается средней сложностью O(1), поскольку сортировка меняет только последовательность итераций, а не базовую структуру хеш-таблицы.

Связанные темы

Рекомендуемые ресурсы Python

Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.