data = {'яблоки': 40, 'апельсины': 80, 'бананы': 30}
# Сортировка по возрастанию значений
sorted_data = dict(sorted(data.items(), key=lambda item: item[1]))
print(sorted_data)
# {'бананы': 30, 'яблоки': 40, 'апельсины': 80}
# Сортировка по убыванию
sorted_data_desc = dict(sorted(data.items(), key=lambda item: item[1], reverse=True))
print(sorted_data_desc)
# {'апельсины': 80, 'яблоки': 40, 'бананы': 30}
Разбор:
data.items()
возвращает пары ключ-значениеkey=lambda item: item[1]
указывает сортировать по второму элементу (значению)sorted()
возвращает список кортежей, который преобразуется обратно в словарьfrom operator import itemgetter
data = {'яблоки': 40, 'апельсины': 80, 'бананы': 30}
sorted_data = dict(sorted(data.items(), key=itemgetter(1)))
Плюсы:
Начиная с Python 3.7 словари сохраняют порядок вставки:
data = {'яблоки': 40, 'апельсины': 80, 'бананы': 30}
sorted_dict = {}
for key, value in sorted(data.items(), key=lambda item: item[1]):
sorted_dict[key] = value
data = {'яблоки': 40, 'апельсины': 80, 'бананы': 30}
sorted_data = {k: v for k, v in sorted(data.items(), key=lambda item: item[1])}
data = {'a': -5, 'b': 3, 'c': -1, 'd': 4}
sorted_data = dict(sorted(data.items(), key=lambda item: abs(item[1])))
# {'c': -1, 'b': 3, 'd': 4, 'a': -5}
users = {
'Alice': {'age': 25, 'score': 90},
'Bob': {'age': 30, 'score': 85},
'Charlie': {'age': 22, 'score': 95}
}
# Сортировка по возрасту
sorted_by_age = dict(sorted(users.items(), key=lambda item: item[1]['age']))
# Сортировка по score
sorted_by_score = dict(sorted(users.items(), key=lambda item: item[1]['score'], reverse=True))
Для очень больших словарей лучше использовать:
# Минимальное потребление памяти
sorted_pairs = sorted(data.items(), key=itemgetter(1))
result = dict(sorted_pairs)
Если нужно часто сортировать и обновлять данные, рассмотрите:
from collections import OrderedDict
sorted_ordered_dict = OrderedDict(sorted(data.items(), key=lambda x: x[1]))
sorted(data.items(), key=lambda item: item[1])
+ dict()
itemgetter
вместо lambdaВыбор метода зависит от конкретной задачи, версии Python и требований к производительности.