Часть 2 из серии статей о сортировке списков Python

Это вторая часть этой замечательной короткой серии статей о том, как сортировать список Python. Мы будем сортировать список словарей Python! Итак, давайте сделаем это!

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

Если вы помните, последняя мини-серия списков Python сортировки работала с простым списком чисел. НО это было важно, так как познакомило вас с основами сортировки Python. Если вы еще не проверяли его, сделайте это, потому что это поможет вам понять некоторые из представленных здесь концепций.

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

Определение данных

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

Для этого наш словарь Python будет выглядеть так:

"""
{
    'name': {string},
    'calories_in_cals_per_kg': {number},
    'proteins_in_grams_per_kg': {number}
}
"""

Как видите, это действительно просто.

name - это просто название порции, calories_in_cals_per_kg указывает, сколько калорий мы можем получить из 1 кг этой порции еды, а protein_in_grams_per_kg - количество белка на 1 кг порции.

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

Объявление наших данных

Теперь, когда мы знаем структуру данных, с которыми мы собираемся отсортировать список словарей Python, давайте объявим наши данные:

foods = [
    {
        'name': 'Maize Flour',
        'calories_in_cals_per_kg': 88,
        'proteins_in_grams_per_kg': 43
    },
    {
        'name': 'Rice',
        'calories_in_cals_per_kg': 105,
        'proteins_in_grams_per_kg': 55
    },
    {
        'name': 'Yams',
        'calories_in_cals_per_kg': 97,
        'proteins_in_grams_per_kg': 87
    },
    {
        'name': 'Beans',
        'calories_in_cals_per_kg': 50,
        'proteins_in_grams_per_kg': 111
    }
]

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

Требования

Поскольку мы собираемся использовать только методы Python, мы будем использовать знаменитый itemgetter из модуля operator.

Итак, импортируем:

from operator import itemgetter

Теперь мы готовы использовать itemgetter.

Как использовать itemgetter с сортировкой Python

Теперь, когда мы импортировали itemgetter в наш скрипт, мы представляем его сортированному методу Python следующим образом:

sorted(list_to_sort, key=itemgetter('attribute_to_use'))

Это значение по умолчанию для использования сортировки Python для сортировки списка словарей Python. Обратите внимание, что мы передаем attribute_to_use в качестве ключа в метод сортировки Python.

Итак, давайте попробуем отсортировать наши продукты по количеству калорий:

sort_foods_based_on_calories = sorted(foods, key=itemgetter('calories_in_cals_per_kg'))
print(sort_foods_based_on_calories)

Это будет отсортировать список словарей Python, которые мы ему передаем, а по ПО УМОЛЧАНИЮ он будет отсортировать в возрастающем порядке, ОСНОВАННЫЙ по указанному атрибуту.

Хорошо, теперь давайте изменим задачу и скажем, что вместо этого мы хотим отсортировать предоставленный список Python, от списка с самым высоким содержанием калорий до самого низкого.

sort_foods_based_on_highest_calories = sorted(foods, key=itemgetter('calories_in_cals_per_kg'), reverse=True)
print(sort_foods_based_on_highest_calories)

Обратите внимание на параметр reverse. Если вы не знаете, что он делает, просто найдите ссылку внизу предыдущей статьи, в которой рассказывается, как сортировать список Python.

Итак, если вы хотите, чтобы список был отсортирован по наивысшему количеству белков на кг, тогда наш метод сортировки Python будет таким:

sort_foods_based_on_highest_proteins = sorted(foods, key=itemgetter('proteins_in_grams_per_kg'), reverse=True)
print(sort_foods_based_on_highest_proteins)

Что ж, это так просто!

Хорошо, а что, если вы попытаетесь отсортировать по атрибуту, которого нет? Что ж, вы получите Python KeyError с указанием отсутствующего атрибута, по которому вы пытаетесь выполнить сортировку.

Некоторые ключевые концепции

Хорошо, как видите, отсортировать список словарей Python не так уж и сложно. Итак, как и в предыдущей статье, у нас есть несколько ключевых концепций, которые вы должны извлечь из этого руководства.

  • Вам понадобится itemgetter из операторского модуля.
  • Метод сортировки Python примет ключевой атрибут, по которому вы хотите выполнить сортировку. Это указывает на значение, возвращаемое itemgetter.

Заключение

Ну вот и все из этой статьи.

Если некоторые из представленных здесь концепций, например, как использовать Python с сортировкой для сортировки списка Python, неясны, просто найдите полное введение в предыдущей статье.

Удачного кодирования!

Вы заинтересованы в изучении Python? Ознакомьтесь с похожими классными статьями здесь: Похожие статьи

Больше контента на plainenglish.io