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

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

  • автор:

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

В этом руководстве вы узнаете, как сортировать словарь Python по его ключу или значению.

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

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

Основы словаря Python, новый взгляд

Что такое словарь Python?

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

Функционально словарь похож на хеш-карту. Следовательно, это не обязательно упорядоченная структура данных. Вы можете получить доступ к содержимому словаря в любом произвольном порядке, если знаете ключи.

Порядок элементов в словаре

В более ранних версиях Python вам приходилось использовать OrderedDict чтобы сохранить порядок клавиш. Однако, начиная с Python 3.7, вы можете обращаться к элементам в том же порядке, в котором вы добавляете их в словарь.

Теперь, когда вы изучили основы словарей Python, давайте узнаем, как создавать отсортированные копии словаря.

⚙️ Примечание. У вас должен быть Python 3.7 или более поздней версии, чтобы код в этом руководстве работал должным образом. Вы можете скачать последняя версия питонаили запустите примеры в онлайн-редакторе Python toadmin.ru.

Как отсортировать словарь Python по ключу

Посмотрите на следующее изображение десертного меню в кафе. Есть две колонки, соответствующие пунктам меню и их соответствующим ценам.

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

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

Далее создадим словарь sorted_desserts, где десерты расположены в алфавитном порядке. В оригинальном словаре десертов названия десертов являются ключами. Таким образом, вы должны отсортировать эти ключи в алфавитном порядке, чтобы создать новый словарь.

Как получить доступ к ключам словаря Python

Для этого мы сначала получим ключи словаря, а затем отсортируем их в алфавитном порядке.

В Python вы можете использовать встроенный метод словаря .keys(), чтобы получить список всех ключей в словаре.

Давайте вызовем метод .keys() в словаре десерта, чтобы получить ключи, как показано ниже.

Вызов встроенной функции Python sorted() со списком в качестве аргумента возвращает новый отсортированный список.

Далее вызовем функцию sorted() с ключами списка в качестве аргумента и сохраним отсортированный список в переменной sorted_keys.

Теперь, когда у нас есть ключи, отсортированные в алфавитном порядке, мы можем найти значения, соответствующие ключам в sorted_keys, в словаре десертов, как показано ниже.

Давайте расширим приведенный выше блок кода:

  • Инициализируйте sorted_desserts как пустой словарь Python.
  • Прокрутите список ключей sorted_keys.
  • Для каждого ключа в sorted_keys добавьте запись в sorted_desserts, найдя соответствующее значение в словаре десертов.

Подобное использование цикла for считается подробным. В Python есть более лаконичная альтернатива, использующая понимание словаря.

Понимание словаря в Python

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

▶️ Вот общая конструкция для использования понимания словаря в Python.

Давайте воспользуемся второй конструкцией в приведенной выше ячейке: new_dict = , чтобы создать словарь sorted_desserts.

  • iterable: список sorted_keys
  • ключ: ключ, к которому мы обращаемся, перебирая sorted_keys
  • значение: найдите значение, соответствующее ключу, в словаре десертов, десерты[key]

Собрав все вместе, мы получим выражение для понимания словаря, как показано ниже.

Из приведенного выше вывода десерты расположены в алфавитном порядке в словаре sorted_desserts.

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

Далее мы узнаем, как сортировать словарь Python по его значениям.

В словаре десертов значения соответствуют ценам десертов. Вы можете отсортировать словарь по ценам в порядке возрастания или убывания.

▶️ Вы можете использовать встроенный метод словаря .items(), чтобы получить все пары ключ-значение. Каждый кортеж представляет собой пару ключ-значение.

Каждый из элементов сам по себе является кортежем. Таким образом, вы также можете индексировать каждую пару ключ-значение, чтобы получить доступ к ключам и значениям по отдельности.

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

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

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

Примечание: лямбда-аргументы: выражение — это синтаксис для определения лямбда-функций в Python.

В этом примере сортировки десертов по цене у нас есть доступ к элементам словаря (пары ключ-значение). Мы установим key = lambda item:item[1] как мы хотели бы отсортировать по значению (цене).

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

Вы также можете переписать, используя понимание словарякак обсуждалось ранее.

В sorted_desserts Cup Cake по цене 2 доллара США является первым товаром, а пирожные по цене 12 долларов – последним.

Как отсортировать значения словаря Python в порядке убывания

Если вы хотите отсортировать цены в порядке убывания, вы можете установить для необязательного реверсивного параметра значение True, как описано ниже.

Теперь sorted_desserts отсортирован в порядке убывания цен, начиная с самого дорогого десерта Brownies стоимостью 12 долларов.

Подведение итогов ����‍��

Давайте быстро суммируем все, что мы узнали в этом уроке.

  • Словарь Python хранит данные в парах ключ-значение; все ключи должны быть уникальными.
  • В процессе сортировки словаря по ключу или значению мы создаем новый словарь, который сортируется по мере необходимости.
  • Вы можете использовать встроенные методы словаря, .keys() и .items(), чтобы получить все ключи и пары ключ-значение соответственно.
  • Вы можете использовать функцию sorted() вместе с необязательными параметрами key и reverse для достижения желаемой сортировки.

Теперь, когда вы узнали, как сортировать словарь Python, научитесь сортировать списки Python. Удачного кодирования!��

Сортировать словарь в Python

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

Итак, давайте теперь посмотрим на разные методы, с помощью которых мы можем отсортировать словарь по ключу или по значению Отказ

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

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

Давайте посмотрим, как.

  • d. items () Метод возвращает список кортежей (элементов), содержащих Ключи и их соответствующие Значения ,
  • лямбда Функция возвращает ключ ( 0-й элемент) для конкретного предмета кортеля,
  • Когда они передаются на отсортировано () Метод, он возвращает отсортированную последовательность, которая затем вписывается в словарь.

Помните, этот метод можно использовать в Python 3.6+ Версии, как оно рассматривает словари как упорядоченные последовательности. Для более старых версий мы можем заменить

Вот и методы отсортировано () и Предметы () работать так же. Но вместо лямбда Функция, itemgetter (0) Метод возвращает Callable объект, который выбирает 0-й предмет от его операнда, используя операнд __getitem __ () метод. В этом случае, как нам нужно сортировать по ключу мы рассмотрим 0-й элемент.

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

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

Следовательно, как мы делали ранее, мы можем использовать отсортировано () Способ наряду с лямбдами функцией для Python 3.6+ Версии. Давайте посмотрим, как.

Точно так же здесь, согласно значениям, возвращенным лямбда Функция ( x [1] Значение для элемента x ) словарь D отсортирован.

Опять же для более старых версий Python следуйте указанному ниже методу.

Аналогичным образом, отсортировано () наряду с D.Items () и itemgetter (1) методами сортировки словаря d на основе значения.

3. Сортировка в обратном порядке

отсортировано () Метод поставляется с другим аргументом Обратный Отказ Это можно использовать для указания порядка, в котором должна быть сделана сортировка. Если прошло Правда сортировка проходит в Обратный порядок (по убыванию). И если Ложь пропущено (по умолчанию), сортировка имеет место в восходящая заказывать.

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

С вышеуказанного выхода, Ясно, что прохождение обратного параметра как Правда Вышеуказанный словарь отсортирован в обратном порядке ( нисходящее ).

Заключение

Так что в этом руководстве мы узнали, как мы можем Сортировать словарь в Python используя различные методы.

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

How to Sort a List of Dictionaries in Python: Sort and Sorted

How to Sort a List of Dictionaries Featured Image

You may recall that I recently published an article on parsing a spreadsheet, and the output ended up being a list of dictionaries. Of course, for data processing purposes, it’s always nice to be able to sort that data, so I thought it would be fun to share a few options for sorting a list of dictionaries in Python.

Table of Contents

Problem Introduction

As mentioned before, I was working on parsing a CSV file for data visualization, and I ended up getting everything I wanted in the following format:

Of course, having the data in a nice format and actually using that data for visualization are very different problems. In other words, we have our data, but we might want to use a subset of it. Likewise, order of the data might matter.

In this case, we might want to order our data points by age. That way we could plot them in order of increasing or decreasing age to see if we could spot any trends. For instance, maybe older individuals prefer certain colors, or perhaps younger individuals have certain types of names.

In any case, we always have to start with data processing. Today, I want to focus on sorting a list of dictionaries.

Solutions

As always, I like to share many possible solutions. It’s normal for me to share a brute force method followed by a couple more elegant methods, so take care to skip ahead if needed.

Sorting a List of Dictionaries by Hand

Sorting is probably one of the most researched areas of Computer Science, so we won’t dive into the philosophy. Instead, we’ll leverage one of the more popular algorithms, selection sort:

Here, we’ve sorted the list of dictionaries in place by age. To do that, we leverage the “Age” field of each dictionary as seen in line 5.

Since looking into this topic, I’ve found that Python has a nice way of handling the variable swap in a single line of code:

Clearly, I didn’t pick that great of a variable name for the swap, but you get the idea. To accomplish the swap, we leverage tuple packing and unpacking. In other words, we create a tuple on the right side of the expression and unpack it on the left side of the expression. Pretty cool stuff!

Sorting a List of Dictionaries With Sort Function

Luckily for us, we don’t have to implement sorting by hand in Python. Instead, we can use the builtin sort function for lists. In the following snippet, we sort the list of dictionaries by age.

Here, we have to specify the key parameter as dictionaries cannot be naturally sorted. Or, as the Python interpreter reports:

To solve this problem, we use the key parameter. The key parameter allows us to define a lambda function which returns some value for each item in our list. In this case, the natural ordering of each dictionary is mapped to the age field of each item.

As expected, the list of dictionaries is sorted in place as follows:

And, it’s just as easy to sort by any other key for that matter:

In both cases, the list will be sorted “alphabetically” as the values are strings. However, be aware that this sort method is case sensitive. I wrote a whole separate article for dealing with String sorting if you’re interested in that.

If you’re not a fan of lambda functions, you’re welcome to take advantage of the operator module which contains the itemgetter function. In short, the itemgetter function provides the same functionality with better performance in a more convenient syntax:

Thanks, dmitrypoloOpens in a new tab., for the tip!

Sorting a List of Dictionaries With Sorted Function

A more generic version of the builtin sort function is the builtin sorted function. It works exactly like the sort function, but it works for all iterables. In other words, if your list in this case is actually a tuple, you have another option:

As you can see, sorted is a little different than the regular sort method in that it returns a new sorted list. To be clear, sorted does not sort the list in place. Instead, it constructs an entirely new list. As a result, we’re able to sort any iterable including tuples.

Like sort , sorted has a ton of custom options, so I recommend checking out the Python documentationOpens in a new tab. if you have a more specific situation. Alternatively, you can reach out in the comments!

A Little Recap

While writing this article, I started to get a feeling of déjà vu. Then, I remembered that I already wrote an article about sorting a list of strings in Python. Apparently, all the methods from there were just as applicable here. At any rate, here are all the solutions discussed in this article:

As usual, I appreciate your support. If you have any recommendations for future articles, let me know in the comments!

How to Python (42 Articles)—Series Navigation

The How to Python tutorial series strays from the usual in-depth coding articles by exploring byte-sized problems in Python. In this series, students will dive into unique topics such as How to Invert a Dictionary, How to Sum Elements of Two Lists, and How to Check if a File Exists.

Each problem is explored from the naive approach to the ideal solution. Occasionally, there’ll be some just-for-fun solutions too. At the end of every article, you’ll find a recap full of code snippets for your own use. Don’t be afraid to take what you need!

If you’re not sure where to start, I recommend checking out our list of Python Code Snippets for Everyday Problems. In addition, you can find some of the snippets in a Jupyter notebook format on GitHubOpens in a new tab.,

If you have a problem of your own, feel free to ask. Someone else probably has the same problem. Enjoy How to Python!

Jeremy grew up in a small town where he enjoyed playing soccer and video games, practicing taekwondo, and trading Pokémon cards. Once out of the nest, he pursued a Bachelors in Computer Engineering with a minor in Game Design. After college, he spent about two years writing software for a major engineering company. Then, he earned a master’s in Computer Science and Engineering. Today, he pursues a PhD in Engineering Education in order to ultimately land a teaching gig. In his spare time, Jeremy enjoys spending time with his wife, playing Overwatch and Phantasy Star Online 2, practicing trombone, watching Penguins hockey, and traveling the world.

Recent Posts

If you’re struggling in the tech field, please read this. I’m looking to build a community for folks who lack proper mentors.

Python software should always be versioned, but it’s not always clear how. Luckily, I’ve shared some of my experience with versioning here.

About Me

Welcome to The Renegade Coder, a coding curriculum website run by myself, Jeremy Grifski. If you like what you see, consider subscribing to my newsletter. Right now, new subscribers will receive a copy of my Python 3 Beginner Cheat Sheet. If newsletters aren’t your thing, there are at least 4 other ways you can help grow The Renegade Coder. I appreciate the support!

Всё о сортировке в Python: исчерпывающий гайд

Сортировка в Python выполняется функцией sorted() , если это итерируемые объекты, и методом list.sort() , если это список. Рассмотрим подробнее, как это работало в старых версиях и как работает сейчас.

Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.

Основы сортировки

Так как отсортировать список Python? Для сортировки по возрастанию достаточно вызвать функцию сортировки Python sorted() , которая вернёт новый отсортированный список:

Для сортировки списка Python также можно использовать метод списков list.sort() , который изменяет исходный список (и возвращает None во избежание путаницы). Обычно Python sort list не так удобен, как использование sorted() , но если вам не нужен исходный список, то так будет немного эффективнее:

Прим.перев. В Python вернуть None и не вернуть ничего — одно и то же.

Ещё одно отличие заключается в том, что метод list.sort() определён только для списков, в то время как функция sorted Python работает со всеми итерируемыми объектами. Грубо говоря, функция sort Python сортирует список и сохраняет его в отсортированном виде, в то время как функция sorted Питон создаёт новый отсортированный список без изменения исходного.

Прим.перев. При итерировании по словарю Python возвращает его ключи. Если вам нужны их значения или пары «ключ-значение», используйте методы dict.values() и dict.items() соответственно.

Рассмотрим основные функции сортировки Python.

Функции-ключи

С версии Python 2.4 у list.sort() и sorted() появился параметр key для указания функции, которая будет вызываться на каждом элементе до сравнения. Вот регистронезависимое сравнение строк:

Значение key должно быть функцией, принимающей один аргумент и возвращающей ключ для сортировки. Работает быстро, потому что функция-ключ вызывается один раз для каждого элемента.

Часто можно встретить код, где сложный объект сортируется по одному из его индексов. Например:

Тот же метод работает для объектов с именованными атрибутами:

Функции модуля operator

Показанные выше примеры функций-ключей встречаются настолько часто, что Python предлагает удобные функции, чтобы сделать всё проще и быстрее. Модуль operator содержит функции itemgetter() , attrgetter() и, начиная с Python 2.6, methodcaller() . С ними всё ещё проще:

Функции operator дают возможность использовать множественные уровни сортировки массива Python. Отсортируем учеников сначала по оценке, а затем по возрасту:

Используем функцию methodcaller() для сортировки учеников по взвешенной оценке:

Сортировка по возрастанию и сортировка по убыванию в Python

У list.sort() и sorted() есть параметр reverse , принимающий boolean-значение. Он нужен для обозначения сортировки по убыванию. Отсортируем учеников по убыванию возраста:

Стабильность сортировки и сложные сортировки в Python

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

Обратите внимание, что две записи с ‘blue’ сохранили начальный порядок. Это свойство позволяет составлять сложные сортировки путём постепенных сортировок. Далее мы сортируем данные учеников сначала по возрасту в порядке возрастания, а затем по оценкам в убывающем порядке, чтобы получить данные, отсортированные в первую очередь по оценке и во вторую — по возрасту:

Алгоритмы сортировки Python вроде Timsort проводят множественные сортировки так эффективно, потому что может извлечь пользу из любого порядка, уже присутствующего в наборе данных.

Декорируем-сортируем-раздекорируем

  1. Сначала исходный список пополняется новыми значениями, контролирующими порядок сортировки.
  2. Затем новый список сортируется.
  3. После этого добавленные значения убираются, и в итоге остаётся отсортированный список, содержащий только исходные элементы.

Вот так можно отсортировать данные учеников по оценке:

Это работает из-за того, что кортежи сравниваются лексикографически, сравниваются первые элементы, а если они совпадают, то сравниваются вторые и так далее.

Не всегда обязательно включать индекс в декорируемый список, но у него есть преимущества:

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

Ещё эта идиома называется преобразованием Шварца в честь Рэндела Шварца, который популяризировал её среди Perl-программистов.

Для больших списков и версий Python ниже 2.4, «декорируем-сортируем-раздекорируем» будет оптимальным способом сортировки. Для версий 2.4+ ту же функциональность предоставляют функции-ключи.

Использование параметра cmp

Все версии Python 2.x поддерживали параметр cmp для обработки пользовательских функций сравнения. В Python 3.0 от этого параметра полностью избавились. В Python 2.x в sort() можно было передать функцию, которая использовалась бы для сравнения элементов. Она должна принимать два аргумента и возвращать отрицательное значение для случая «меньше чем», положительное — для «больше чем» и ноль, если они равны:

Можно сравнивать в обратном порядке:

При портировании кода с версии 2.x на 3.x может возникнуть ситуация, когда нужно преобразовать пользовательскую функцию для сравнения в функцию-ключ. Следующая обёртка упрощает эту задачу по Python:

Чтобы произвести преобразование, оберните старую функцию:

В Python 2.7 функция cmp_to_key() была добавлена в модуль functools.

Поддержание порядка сортировки

В стандартной библиотеке Python нет модулей, аналогичных типам данных C++ вроде set и map . Python делегирует эти задачи сторонним библиотекам, доступным в Python Package Index: они используют различные методы для сохранения типов list , dict и set в отсортированном порядке. Поддержание порядка с помощью специальной структуры данных может помочь избежать очень медленного поведения (квадратичного времени выполнения) при наивном подходе с редактированием и постоянной пересортировкой данных. Вот некоторые из модулей, реализующих эти типы данных:

    — реализация сортированных типов list , dict и set на чистом Python, по скорости не уступает реализациям на C. Тестирование включает 100% покрытие кода и многие часы стресс-тестирования. В документации можно найти полный справочник по API, сравнение производительности и руководства по внесению своего вклада. — быстрая реализация на C для типов dict и set . Реализация использует структуру данных, известную как красно-чёрное дерево. — сортированный dict . В реализации используется Декартово дерево, а производительность улучшена с помощью Cython. — несколько реализаций типов dict и set на основе деревьев на C. Самые быстрые основаны на АВЛ и красно-чёрных деревьях. Расширяет общепринятый API для предоставления операций множеств для словарей. — быстрая реализация dict и set на C. — реализация на чистом Python, основанная на списках с пропусками, предлагает ограниченный API для типов dict и set . — предоставляет сортированные типы list , dict и set , основанные на типе данных «blist», реализация на Б-деревьях. Написано на Python и C.

Прочее

Для сортировки с учётом языка используйте locale.strxfrm() в качестве ключевой функции или locale.strcoll() в качестве функции сравнения. Параметр reverse всё ещё сохраняет стабильность сортировки. Этот эффект можно сымитировать без параметра, использовав встроенную функцию reversed() дважды:

Чтобы создать стандартный порядок сортировки для класса, просто добавьте реализацию соответствующих методов сравнения:

Для типов, сравнение которых работает обычным образом, рекомендуется определять все 6 операторов. Декоратор классов functools.total_ordering упрощает их реализацию. Функциям-ключам не нужен доступ к внутренним данным сортируемых объектов. Они также могут осуществлять доступ к внешним ресурсам. Например, если оценки ученика хранятся в словаре, их можно использовать для сортировки отдельного списка с именами учеников:

Надеемся, теория по Python list sort и соответствующие задачи по Питону с разбором были для вас полезны. Вас также может заинтересовать статьи:

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

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