Как отсортировать словарь по значению в 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 с помощью метода sort() и функции sorted(). Ознакомьтесь с примерами пользовательской сортировки ключей и обратного порядка.
Как перебирать словарь в PythonУзнайте, как выполнять цикл или перебирать словарь Python. Откройте для себя методы перебора ключей, значений и пар «ключ-значение» с помощью понятных и работоспособных примеров.
Рекомендуемые ресурсы Python
Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.
Циклы Python
Узнайте, как использовать циклы Python для перебора данных. Освойте циклы for, while, прерывание, продолжение и лучшие практики работы с циклами с помощью интерактивных примеров.
Шпаргалка по словарным методам Python
Изучите словарные методы Python. Полное справочное руководство по вставке, извлечению, обновлению и проверке пар ключ-значение.
Python против Ruby: сценарии, веб-фреймворки и философия
Сравните Python и Ruby. Изучите тонкие различия в их философии, элегантности синтаксиса, веб-фреймворках (Djangoи Rails) и стилях выполнения.