Поиск в списке словарей в Python

  1. Используйте функцию next() для поиска в списке словарей в Python
  2. Поиск в списке словарей с помощью функции filter() в Python
  3. Использование понимания списка для поиска в списке словарей в Python

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

Используйте функцию next() для поиска в списке словарей в Python

Функцию next() можно использовать для предоставления результата в качестве следующего элемента в данном итераторе. Этот метод также требует использования цикла for для проверки процесса на соответствие всем условиям.

Следующий код использует функцию next() для поиска в списке словарей в Python.

lstdict = [
        { "name": "Klaus", "age": 32 },
        { "name": "Elijah", "age": 33 },
        { "name": "Kol", "age": 28 },
        { "name": "Stefan", "age": 8 }
       ]
print(next(x for x in lstdict if x["name"] == "Klaus"))
print(next(x for x in lstdict if x["name"] == "David"))

Выход:

{'name': 'Klaus', 'age': 32}
Traceback (most recent call last):
  File "<string>", line 8, in <module>
StopIteration

Этот метод успешно реализуется, когда мы ищем имя, которое уже существует в списке словарей. Тем не менее, он выдает ошибку StopIteration при поиске имени, которого нет в списке словарей.

Однако эту проблему легко решить с помощью приведенного выше кода. Вы просто настраиваете и предоставляете значение по умолчанию с использованием немного другого API.

lstdict = [
        { "name": "Klaus", "age": 32 },
        { "name": "Elijah", "age": 33 },
        { "name": "Kol", "age": 28 },
        { "name": "Stefan", "age": 8 }
       ]
print(next((x for x in lstdict if x["name"] == "David"), None))

Выход:

None

Вместо того, чтобы искать сам элемент, мы также можем найти индекс элемента в Списке словарей. Для реализации этого мы можем использовать функцию enumerate().

Следующий код использует функцию next() и функцию enumerate() для поиска и нахождения индекса элемента.

lstdict = [
        { "name": "Klaus", "age": 32 },
        { "name": "Elijah", "age": 33 },
        { "name": "Kol", "age": 28 },
        { "name": "Stefan", "age": 8 }
       ]
print(next((i for i, x in enumerate(lstdict) if x["name"] == "Kol"), None))

Выход:

2

Поиск в списке словарей с помощью функции filter() в Python

Функция filter(function, sequence) используется для сравнения sequence с function в Python. Он проверяет, является ли каждый элемент в последовательности истинным или нет, в соответствии с функцией. Мы можем легко найти элемент в списке словарей, используя функцию filter() с функцией lambda. В Python3 функция filter() возвращает объект класса filter. Мы можем преобразовать этот объект в список с помощью функции list().

В следующем примере кода показано, как мы можем искать в списке словарей определенный элемент с помощью функций filter() и lambda.

listOfDicts = [
     { "name": "Tommy", "age": 20 },
     { "name": "Markus", "age": 25 },
     { "name": "Pamela", "age": 27 },
     { "name": "Richard", "age": 22 }
]
list(filter(lambda item: item['name'] == 'Richard', listOfDicts))

Выход:

[{'age': 22, 'name': 'Richard'}]

Мы провели поиск в списке словарей элемента, в котором ключ name равен Richard, используя функцию filter() с функцией lambda. Сначала мы инициализировали наш список словарей, listOfDicts, и использовали функцию filter() для поиска значений, которые соответствуют функции lambda lambda item: item['name'] == 'Richard' в Это. Наконец, мы использовали функцию list() для преобразования результатов в список.

Использование понимания списка для поиска в списке словарей в Python

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

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

Следующий код использует понимание списка для поиска по списку словарей в Python.

lstdict = [
        { "name": "Klaus", "age": 32 },
        { "name": "Elijah", "age": 33 },
        { "name": "Kol", "age": 28 },
        { "name": "Stefan", "age": 8 }
       ]

print([x for x in lstdict if x['name'] == 'Klaus'][0])

Выход:

{'name': 'Klaus', 'age': 32}

Сопутствующая статья - Python Dictionary

  • Как проверить наличие ключа в словаре на Python языке
  • Как получить все файлы каталога
  • Как удалить файл и каталог на Python
  • Как сортировать Pythonский словарь по значению
  • Сопутствующая статья - Python List

  • Как проверить наличие ключа в словаре на Python языке
  • Как получить все файлы каталога
  • Как удалить файл и каталог на Python
  • Как сортировать Pythonский словарь по значению