Share This
Связаться со мной
Крути в низ
Categories
//Сортировка словаря по значению

Сортировка словаря по значению

11.01.2023Category : Python

Словари в Python не имеют специальных методов, позволяющих сортировать элементы по значениям. Поэтому сортировка словаря по значению осуществляется при помощи других структур данных, например списков.

Допустим у нас есть словарь markdict, содержащий имена и оценки студентов.

Класс dict имеет метод items(), который возвращает представление элементов словаря в виде списка кортежей. Эти кортежи содержат по одной паре ключ-значение.

markdict = {"Tom": 67, "Tina": 54, "Akbar": 87, "Kane": 43, "Divya": 73} marklist = list(markdict.items()) print(marklist)  # Результат: # [('Tom', 67), ('Tina', 54), ('Akbar', 87), ('Kane', 43), ('Divya', 73)]

От редакции Pythonist. О методе items() и других словарных методах можно почитать в статье «Словари в Python».

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

markdict = {"Tom": 67, "Tina": 54, "Akbar": 87, "Kane": 43, "Divya": 73} marklist = list(markdict.items())  l = len(marklist) for i in range(l - 1):     for j in range(i + 1, l):         if marklist[i][1] > marklist[j][1]:             t = marklist[i]             marklist[i] = marklist[j]             marklist[j] = t     sortdict = dict(marklist) print(sortdict)  # Результат: # {'Kane': 43, 'Tina': 54, 'Tom': 67, 'Divya': 73, 'Akbar': 87}

Сортировка словаря по значению при помощи метода sorted()

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

markdict = {"Tom": 67, "Tina": 54, "Akbar": 87, "Kane": 43, "Divya": 73} marklist = sorted(markdict.items(), key=lambda x: x[1]) sortdict = dict(marklist) print(sortdict)  # Результат: # {'Kane': 43, 'Tina': 54, 'Tom': 67, 'Divya': 73, 'Akbar': 87}

Еще с функцией sorted() можно использовать функцию itemgetter(), которая определена в модуле operator стандартной библиотеки Python. Функция itemgetter() возвращает вызываемый объект из своего операнда.

import operator  markdict = {"Tom": 67, "Tina": 54, "Akbar": 87, "Kane": 43, "Divya": 73} marklist = sorted(markdict.items(), key=operator.itemgetter(1)) sortdict = dict(marklist) print(sortdict)  # Результат: # {'Kane': 43, 'Tina': 54, 'Tom': 67, 'Divya': 73, 'Akbar': 87}

Наконец, с функцией sorted() можно использовать метод dict.items(), чтобы сначала получить кортежи вида (оценка, имя), а затем пересобрать словарь, упорядоченный по оценкам.

markdict = {"Tom": 67, "Tina": 54, "Akbar": 87, "Kane": 43, "Divya": 73} marklist = sorted((value, key) for (key, value) in markdict.items()) sortdict = dict([(k, v) for v, k in marklist]) print(sortdict)  # Результат: # {'Kane': 43, 'Tina': 54, 'Tom': 67, 'Divya': 73, 'Akbar': 87}

Перевод статьи «How to sort dictionary by value in Python?».

  • 0 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close