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

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

Этот сценарий очень распространен в реальных задачах, таких как обработка данных JSON из веб-API или обработка параметров конфигурации в приложениях.

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

Давайте начнем!

Получить значение ключа из списка словарей, используя цикл Python For

Самый простой подход к извлечению ключа из списка словарей — использовать цикл Python for.

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

Вот список словарей, с которыми мы можем работать. Каждый словарь содержит имя и фамилию, описывающие человека:

people = [{'firstname':'John', 'lastname':'Ross'}, {'firstname':'Mark', 'lastname':'Green'}]

Теперь создайте цикл for, который проходит через каждый словарь и извлекает имя:

firstnames = []

for person in people:
    firstnames.append(person['firstname'])
 
print(firstnames)

Вывод оператора печати показывает, что логика этого кода правильна:

['John', 'Mark']

Вот разбивка кода построчно:

  1. firstnames = []: Эта строка инициализирует пустой список с именем firstnames. Мы добавим peopleв этот список первые имена, извлеченные из каждого словаря в списке.
  2. for person in people:Эта строка запускает цикл for. Каждая итерация цикла берет один словарь из списка people и присваивает его переменной person.
  3. firstnames.append(person['firstname']): внутри цикла для каждого person (который является словарем) код извлекает значение, связанное с ключом 'firstname'. Затем он добавляет это значение в список firstnames, используя метод append().

Давайте теперь рассмотрим другой подход.

Получите значение определенного ключа из списка словарей, используя понимание списка

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

Понимание списков позволяет писать код кратко и элегантно, и иногда их использование вместо цикла for может оказаться лучшим вариантом.

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

people = [{'firstname':'John', 'lastname':'Ross'}, {'firstname':'Mark', 'lastname':'Green'}]
firstnames = [person['firstname'] for person in people]
print(firstnames)

Вывод такой же, как вы видели в цикле for:

['John', 'Mark']

Функция понимания списка перебирает все имена person в списке people, извлекает person['firstname'] и собирает эти имена в новый список с именем firstnames.

Одной строкой кода вы заменили весь цикл for и операцию добавления из исходного кода. Замечательно!

Извлеките значение ключа из списка словарей с помощью лямбда-функции

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

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

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

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

lambda person: person['firstname']

Проверьте эту лямбду в оболочке Python с помощью первого словаря из нашего тестового списка:

>>> (lambda person: person['firstname'])({'firstname':'John', 'lastname':'Ross'})
'John'

Затем передайте эту лямбду в функцию map(). Вот синтаксис встроенной функции map():

map(function, iterable, *iterables)

Примечание. Функция map() может принимать несколько итераций, и в этом примере мы передадим ей одну итерацию — наш список словарей.

Аргументы, которые вы передадите функции map():

  • Первый аргумент: только что созданная лямбда-функция.
  • Второй аргумент: список словарей, из которых мы хотим извлечь атрибут firstname.

Вот как выглядит полное выражение:

firstnames = list(map(lambda person: person['firstname'], people))

Давайте проверим этот код:

>>> people = [{'firstname':'John', 'lastname':'Ross'}, {'firstname':'Mark', 'lastname':'Green'}]
>>> firstnames = list(map(lambda person: person['firstname'], people))
>>> firstnames
['John', 'Mark']

Результат правильный. Это очень мощный подход.

Заключение

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

  • Традиционный цикл for в сочетании с методом append создания нового списка имен. Этот подход прост и интуитивно понятен, особенно для новичков в Python.
  • Понимание списка. Это более питонический способ добиться того же результата всего за одну строку кода. Понимание списков не только уменьшает объем кода, но и повышает читаемость.
  • Функции map() и lambda. Этот подход менее читаем, чем два предыдущих, особенно если вы только начинаете работать с Python. В то же время это хорошее упражнение для расширения ваших знаний Python.

Понимание этих трех методов дает вам все необходимое для выбора предпочтительной реализации.