Как отсортировать словарь по значению python
Перейти к содержимому

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

  • автор:

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

Сортировка словарей производится при помощи встроенной функцией sorted() и происходит немного сложнее чем сортировка списков или кортежей.

Сортировка словаря по ключу.

Функция sorted() работает со всеми объектами, которые поддерживают итерирование. Словарь, в свою очередь при итерировании, выдает только ключи, но нам необходимо получить исходный отсортированный словарь, а не только отсортированные ключи. Следовательно из словаря необходимо получить итерацию [(key, val), (key, val), . ] , затем отсортировать ее по значению key и преобразовать обратно в словарь.

Список кортежей (key, val) можно получить методом словаря dict.items() .

>>> d = 'b': 9, 'a': 3, 'c': 7> # получаем итерацию кортежей `(key, val)` >>> d.items() # dict_items([('b', 9), ('a', 3), ('c', 7)]) # то что нужно 

Так как значение key стоит первым, то и ключ для сортировки укажем как lambda x: x[0] , где x — это кортеж (key, val)

# исходный словарь >>> d = 'b': 9, 'a': 3, 'c': 7> # собственно сама сортировка >>> sorted_tuple = sorted(d.items(), key=lambda x: x[0]) # получили отсортированный список кортежей, # отсортированных по первому значению >>> sorted_tuple # [('a', 3), ('b', 9), ('c', 7)] # преобразовываем обратно в словарь dict(sorted_tuple) #

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

Применяя методику сортировки описанную выше, можно легко догадаться как сортировать словарь по значению. Для этого просто укажем в качестве ключа сортировки индекс значения словаря в полученном списке кортежей: lambda x: x[1] , где x — это кортеж (key, val)

>>> d = 'b': 9, 'a': 3, 'c': 7> >>> sorted_tuple = sorted(d.items(), key=lambda x: x[1]) >>> sorted_tuple # [('a', 3), ('c', 7), ('b', 9)] # преобразовываем обратно в словарь >>> dict(sorted_tuple) #

Для получения ключа сортировки из dict.items() , так же можно использовать функцию operator.itemgetter() :

>>> d = 'b': 9, 'a': 3, 'c': 7> >>> import operator >>> sorted_tuple = sorted(d.items(), key=operator.itemgetter(1)) >>> sorted_tuple # [('a', 3), ('c', 7), ('b', 9)] >>> dict(sorted_tuple) #
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Представления словарей dict.keys, dict.values и dict.items
  • Исходный словарь для представления dictview.mapping
  • Получение списка ключей словаря list(dict)
  • Количество элементов в словаре len(dict)
  • Доступ к значению словаря по ключу dict[key]
  • Добавление/изменение значения словаря по ключу key
  • Удаление значения словаря по ключу
  • Проверка наличия/отсутствия ключа key в словаре dict
  • Проверка наличия/отсутствия значения value в словаре Python
  • Проверка наличия/отсутствия пары (key, value) в словаре dict
  • Итерирование по ключам и значениям словаря Python
  • Метод dict.clear(). Очистить словарь
  • Метод dict.copy(), копия словаря
  • Метод dict.fromkeys(), словарь с ключами по умолчанию
  • Метод dict.get(), значение по умолчанию если ключа нет
  • Метод dict.items(), список кортежей
  • Метод dict.keys(), список ключей словаря
  • Метод dict.values(), список значений словаря
  • Метод dict.pop()
  • Метод dict.popitem(), получить пару ключ/значение
  • Метод dict.setdefault(), получает/вставляет значение ключа
  • Метод dict.update(), обновление/дополнение словаря
  • Объединение двух словарей в новый словарь Python
  • Сортировка словаря по значению и/или ключу
  • Обратный порядок/реверс словаря reversed(dict)
  • Генератор словаря и его использование
  • Фильтр словаря по ключам и/или значениям
  • Словарь как фабрика функций

Как отсортировать словарь по значениям от большего к меньшему?

Начиная с версии Python 3.6 порядок элементов словаря сохраняется с момента создания. Так что можно просто создать новый словарь из элементов старого, предварительно отсортировав их. Или воспользоваться олд-скульным OrderedDict .

from collections import OrderedDict d = print("dict =", d) nd = dict(sorted(d.items(), key=lambda x: x[1])) print("new dict =", nd) od = OrderedDict(sorted(d.items(), key=lambda x: x[1])) print("ordered dict =", od) 
dict = new dict = ordered dict = OrderedDict([('c', -2), ('z', 44), ('a', 102)]) 

Сортировка словаря Python: как сортировать по значению, по ключу

Lorem ipsum dolor

В Python присутствует возможность хранить определенную информацию в словарях. Словарь в Питоне — это способ сохранить данные, используя форму «ключ-значение». Каждому отдельному ключу соответствует определенное значение. Данные в словаре изменяемые, поэтому структура в словарях чаще всего неупорядоченная. Для того чтобы упорядочить данные, используется сортировка словаря Python по ключу или значению.

Значения в словаре могут быть разными и даже повторяющимися, а ключ всегда уникальный. Словарь в Python обозначается ф игурными скобкам и , а сохраняемые пары «ключ-значение» отделяются з апято й . Вот как выглядит примитивный словарь Python в коде:

myDictionary =

Словарь очень похож на список Python, но отличается от него более легким поиском элементов, поэтому словарь считается быстрее списка. Однако, чтобы удобно работать со словарем, нужна сортировка словаря. Именно об этом мы сегодня и поговорим.

Сортировка словаря Python

  • keys() — для сортировки словаря по ключам ;
  • values() — для сортировки словаря по значениям.

Сортировка словаря Python по ключам

Это наиболее правильный вид сортировки, потому что обращаться к элементам словаря можно только по ключам. Когда осуществляется сортировка словаря Python по значениям, приходится немного «потрудит ь ся», потому что напрямую только к значениям словаря Питона обратиться нельзя. Об этом чуть ниже, а пока — вот как осуществляется сортировка словаря Python по ключам с использованием функции «keys()»:

names =

#выводим отсортированные ключи словаря

print(sorted(names.keys()))

#выводим отсортированный словарь целиком

print(sorted(names.items()))

В результате мы получим следующее:

#отсортированные ключи словаря

[1, 2, 3, 4, 5, 6]

#отсортированный словарь

[(1, ‘Алиса’), (2, ‘Иван’), (3, ‘Андрей’), (4, ‘Петр’), (5, ‘Яна’), (6, ‘Дормидонт’)]

Фактически при таком подходе сортировки словаря происходит создание списка ключей, потом ключи сортируются. При необходимости можно вывести либо отсортированные ключи, либо весь словарь.

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

  • напрямую к значения м обратиться сложно;
  • используя данный вид сортировки, невозможно отсортировать информацию в том же словаре, поэтому создается новый словарь с отсортированными значениями.

Заключение

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

Раньше словарь Python приходилось сортировать, используя циклы «for» , в этом случае код очень сильно «раздувался». Но с приходом специальной функции «sorted()» сортировка словаря Python стала более компактной и понятной.

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Сортировка словаря

На самом деле содержимое словаря отсортировать нельзя, так как словарь в Python — это неупорядоченная структура данных, доступ к элементам которой осуществляется по ключам, а не индексам.

Следует отметить, что в последних релизах Python словари помнят порядок добавления в них элементов. Таким образом, словарь изначально может заполняться так или иначе отсортированной последовательностью пар «ключ:значение».

Однако чаще всего мы имеем дело с неупорядоченными словарями. При просмотре элементов словаря можно сделать так, чтобы это происходило согласно определенному порядку. Для этого дополнительно используется упорядоченная структура, которую можно отсортировать (список или кортеж).

Сортировка по ключам

Проще всего выполнить сортировку словаря по ключам. Алгоритм вывода содержимого словаря:

  1. Создать список ключей словаря.
  2. Отсортировать его.
  3. В цикле for перебрать элементы списка, используя элемент списка как ключ словаря.
>>> d = >>> list_keys = list(d) >>> list_keys ['t', 'm', 'x', 'a'] >>> list_keys.sort() >>> list_keys ['a', 'm', 't', 'x'] >>> for i in list_keys: . print(i + ':', d[i]) . a: 10 m: 2 t: 4 x: 3

Функция sorted() позволяет сразу создать список отсортированных ключей словаря. Поэтому пример выше упрощается до такого:

>>> d = >>> for i in sorted(d): . print(i + ':', d[i]) . a: 10 m: 2 t: 4 x: 3

Сортировка по значениям

Отсортировать словарь по значениям сложнее, так как обращаться к элементам словаря можно только по ключам. Однако можно создать список кортежей («ключ», «значение») и отсортировать его по вторым элементам пар.

>>> d = >>> list_d = list(d.items()) >>> list_d [('t', 4), ('m', 2), ('x', 3), ('a', 10)] >>> list_d.sort(key=lambda i: i[1]) >>> list_d [('m', 2), ('x', 3), ('t', 4), ('a', 10)] >>> for k, v in list_d: . print(k + ':', v) . m: 2 x: 3 t: 4 a: 10

Если бы мы использовали метод sort() без параметра key , то сортировка была бы выполнена по первым элементам кортежей. В качестве значения для key указывается функция. В данном случае используется lambda-функция, что уменьшает объем кода. В функцию передаются кортежи, а возвращаются их вторые элементы, по которым происходит сортировка.

Также можно использовать функцию sorted() :

>>> d = >>> t = sorted(d.items(), key=lambda i: i[1]) >>> t [('m', 2), ('x', 3), ('t', 4), ('a', 10)] 

Класс OrderedDict модуля collections

В модуле collections имеется класс OrderedDict , который является подклассом класса dict , то есть обычного встроенного в Python словаря. OrderedDict позволяет создавать объекты-словари, которые помнят порядок своих элементов. Также класс имеет ряд методов, которые предназначены для изменения порядка элементов в словаре.

>>> from collections import OrderedDict >>> od = OrderedDict() >>> od OrderedDict([('t', 4), ('m', 2), ('x', 3), ('a', 10)]) >>> item = min(od, key=lambda i: od[i]) >>> item 'm' >>> od.move_to_end(item, last=False) >>> od OrderedDict([('m', 2), ('t', 4), ('x', 3), ('a', 10)]) 

Добавить комментарий

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