HOWTO · Python
Buscar una lista de diccionarios en Python
Podemos usar las expresiones generadoras y la función filter() para buscar una lista de diccionarios en Python.
En esta página
Este tutorial presentará los métodos que puede utilizar para buscar una lista de diccionarios en Python.
Utilice la función next() para buscar una lista de diccionarios en Python
La función next() se puede utilizar para proporcionar el resultado como el siguiente elemento en el iterador dado. Este método también requiere el uso del bucle for para probar el proceso contra todas las condiciones.
El siguiente código usa la función next() para buscar una lista de diccionarios en 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"))
Producción :
{'name': 'Klaus', 'age': 32}
Traceback (most recent call last):
File "<string>", line 8, in <module>
StopIteration
Este método se implementa con éxito cuando buscamos un nombre que ya existe en la lista de diccionarios. Aún así, da un error de StopIteration cuando se busca un nombre que no existe en la lista de diccionarios.
Sin embargo, este problema se puede tratar fácilmente en el código anterior. Simplemente modifica y proporciona un valor predeterminado con el uso de una API ligeramente 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))
Producción :
None
En lugar de buscar el elemento en sí, también podemos encontrar el índice del elemento en una Lista de diccionarios. Para implementar esto, podemos usar la función enumerate().
El siguiente código utiliza la función next() y la función enumerate() para buscar y encontrar el índice del elemento.
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))
Producción :
2
Buscar una lista de diccionarios con la función filter() en Python
La función filter(function, sequence) se utiliza para comparar la sequence con la function en Python. Comprueba que cada elemento de la secuencia sea verdadero o no según la función. Podemos buscar fácilmente un elemento en una lista de diccionarios utilizando la función filter() con una función lambda. En Python3, la función filter() devuelve un objeto de la clase filter. Podemos convertir ese objeto en una lista con la función list().
El siguiente ejemplo de código nos muestra cómo podemos buscar en una lista de diccionarios un elemento específico con las funciones filter() y 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))
Producción :
[{'age': 22, 'name': 'Richard'}]
Buscamos en la lista de diccionarios el elemento donde la clave name es igual a Richard utilizando la función filter() con una función lambda. Primero, inicializamos nuestra lista de diccionarios, listOfDicts, y usamos la función filter() para buscar los valores que coinciden con la función lambda lambda item: item['name'] == 'Richard' in eso. Finalmente, usamos la función list() para convertir los resultados en una lista.
Utilice la comprensión de listas para buscar una lista de diccionarios en Python
La comprensión de listas es una forma relativamente más corta y muy elegante de crear listas que se formarán en función de los valores dados de una lista ya existente.
Podemos usar la comprensión de listas para devolver una lista que produzca los resultados de la búsqueda de la lista de diccionarios en Python.
El siguiente código usa la comprensión de listas para buscar una lista de diccionarios en 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])
Producción :
{'name': 'Klaus', 'age': 32}