HOWTO · Python

Pesquise uma lista de dicionários em Python

Podemos usar as expressões geradoras e a função filter() para pesquisar uma lista de dicionários em Python.

Este tutorial irá apresentar os métodos que você pode usar para pesquisar uma lista de dicionários em Python.

Use a função next() para pesquisar uma lista de dicionários em Python

A função next() pode ser utilizada para fornecer o resultado como o próximo item no iterador fornecido. Este método também requer o uso do loop for para testar o processo em todas as condições.

O código a seguir usa a função next() para pesquisar uma lista de dicionários em 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"))

Resultado:

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

Este método é implementado com sucesso quando procuramos um nome que já existe na lista de dicionários. Ainda assim, dá um erro StopIteration quando é pesquisado um nome que não existe na lista de dicionários.

No entanto, esse problema pode ser facilmente tratado no código acima. Você simplesmente ajusta e fornece um padrão com o uso de uma API ligeiramente diferente.

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))

Resultado:

None

Em vez de localizar o item em si, também podemos localizar o índice do item em uma Lista de dicionários. Para implementar isso, podemos usar a função enumerate().

O código a seguir usa a função next() e a função enumerate() para pesquisar e encontrar o índice do item.

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))

Resultado:

2

Pesquise uma lista de dicionários com a função filter() em Python

O filter(function, sequence) função é usado para comparar a sequence com a function em Python. Ele verifica se cada elemento na sequência é verdadeiro ou não de acordo com a função. Podemos pesquisar facilmente uma lista de dicionários para um item usando a função filter() com uma função lambda. Em Python3, a função filter() retorna um objeto da classe filter. Podemos converter esse objeto em uma lista com a função list().

O exemplo de código a seguir nos mostra como podemos pesquisar uma lista de dicionários para um elemento específico com as funções filter() e 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))

Resultado:

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

Procuramos na lista de dicionários o elemento onde a chave name é igual a Richard usando a função filter() com uma função lambda. Primeiro, inicializamos nossa lista de dicionários, listOfDicts, e usamos a função filter() para pesquisar os valores que correspondem à função lambda lambda item: item['name'] == 'Richard' em isto. Finalmente, usamos a função list() para converter os resultados em uma lista.

Use a compreensão de lista para pesquisar uma lista de dicionários em Python

A compreensão de listas é uma maneira relativamente mais curta e muito elegante de criar listas que devem ser formadas com base nos valores fornecidos de uma lista já existente.

Podemos usar a compreensão de lista para retornar uma lista que produz os resultados da pesquisa da lista de dicionários em Python.

O código a seguir usa compreensão de lista para pesquisar uma lista de dicionários em 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])

Resultado:

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