Iterando con listas de diccionarios
Recordemos nuestra lista de diccionarios de estudiantes:
# Lista de diccionarios de estudiantes
estudiantes = [
{"nombre": "Juan", "especialidad": "Electricidad", "habilidad especial": "Soldadura"},
{"nombre": "María", "especialidad": "Mecánica", "habilidad especial": "Dibujo técnico"},
{"nombre": "Pedro", "especialidad": "Electrónica", "habilidad especial": None}
]
¿Cómo hacemos para imprimir cada diccionario en pantalla? En otras palabras, ¿cómo iteramos sobre una lista de diccionarios?
Haz clic aquí para ver la solución propuesta
Para iterar sobre una lista de diccionarios, podemos hacer lo siguiente:
# Lista de diccionarios de estudiantes
estudiantes = [
{"nombre": "Juan", "especialidad": "Electricidad", "habilidad especial": "Soldadura"},
{"nombre": "María", "especialidad": "Mecánica", "habilidad especial": "Dibujo técnico"},
{"nombre": "Pedro", "especialidad": "Electrónica", "habilidad especial": None}
]
# Iterando sobre la lista de diccionarios
for estudiante in estudiantes:
print(estudiante)
La salida de este código será:
{'nombre': 'Juan', 'especialidad': 'Electricidad', 'habilidad especial': 'Soldadura'}
{'nombre': 'María', 'especialidad': 'Mecánica', 'habilidad especial': 'Dibujo técnico'}
{'nombre': 'Pedro', 'especialidad': 'Electrónica', 'habilidad especial': None}
En este caso, estamos utilizando un bucle
for
para iterar sobre la lista de diccionariosestudiantes
. En cada iteración, la variableestudiante
contiene un diccionario con los datos de un estudiante en particular. Luego, simplemente imprimimos el diccionario completo en pantalla.
De esta manera, podemos imprimir todos los diccionarios de la lista utilizando una estructura repetitiva.
Accediendo a los valores de un diccionario en un bucle
Sin embargo, con poder acceder a cada diccionario no es suficiente porque lo interesante es poder procesar la información contenida adentro.
El diccionario como tal es un conjunto de datos que por si solo no representan información concreta. Uno puede imaginar, intuir, sacar conclusiones sobre de qué se trata el contenido de un diccionario, pero eso no significa que estas conclusiones sean correctas o exactas.
Precisamos poder manipular el contenido del diccionario
Entonces, ¿cómo hacemos para acceder a los valores de cada diccionario?
Supongamos que aplicamos la misma metodología que utilizamos con las listas y los diccionarios por separado, pero combinando ambas estructuras de datos:
``` py title="Python" linesnum="1" hl_lines="10"
Lista de diccionarios de estudiantes
estudiantes = [ {"nombre": "Juan", "especialidad": "Electricidad", "habilidad especial": "Soldadura"}, {"nombre": "María", "especialidad": "Mecánica", "habilidad especial": "Dibujo técnico"}, {"nombre": "Pedro", "especialidad": "Electrónica", "habilidad especial": None} ]
Iterando sobre la lista de diccionarios
for estudiante in estudiantes: print(estudiante["nombre"])
¿Qué crees que sucederá si ejecutamos este código?
??? example "Haz clic aquí para descubrirlo."
La salida de este código será:
``` py title="Terminal (Entrada/Salida)"
Juan
María
Pedro
```
> En este caso, estamos utilizando un bucle `for` para iterar sobre la lista de diccionarios `estudiantes`. En cada iteración, la variable `estudiante` contiene un diccionario con los datos de un estudiante en particular.
>
> Luego, accedemos al valor asociado a la clave "nombre" para imprimir el nombre de cada estudiante.
De esta manera, podemos imprimir los nombres de los estudiantes en la lista de diccionarios en un solo bucle.
Muy bien, con esta información, ¿qué crees que sucederá si modificamos la línea 10 por la siguiente?
``` py title="Python"
⋮
print(estudiante["nombre"], estudiante["especialidad"], estudiante["habilidad especial"], sep=', ')
⋮
Haz clic aquí para ver la solución propuesta
La salida de este código será:
Juan, Electricidad, Soldadura
María, Mecánica, Dibujo técnico
Pedro, Electrónica, None
En este caso, estamos utilizando un bucle
for
para iterar sobre la lista de diccionariosestudiantes
. En cada iteración, la variableestudiante
contiene un diccionario con los datos de un estudiante en particular.Luego, accedemos a los valores asociados a las claves "nombre", "especialidad" y "habilidad especial" para imprimir el nombre, la especialidad y la habilidad especial de cada estudiante.
De esta manera, podemos imprimir los nombres, especialidades y habilidades especiales de los estudiantes en la lista de diccionarios en un solo bucle.
Optimizando la la salida en pantalla
Vamos a mejorar un poco el programa:
# Lista de diccionarios de estudiantes
estudiantes = [
{"nombre": "Juan", "especialidad": "Electricidad", "habilidad especial": "Soldadura"},
{"nombre": "María", "especialidad": "Mecánica", "habilidad especial": "Dibujo técnico"},
{"nombre": "Pedro", "especialidad": "Electrónica", "habilidad especial": None}
]
# Iterando sobre la lista de diccionarios
for estudiante in estudiantes:
if estudiante["habilidad especial"] is None:
print(f"{estudiante['nombre']} estudia en la especialidad de {estudiante['especialidad']} y no tiene habilidad especial.")
else:
print(f"{estudiante['nombre']} estudia en la especialidad de {estudiante['especialidad']} y su habilidad especial es {estudiante['habilidad especial']}.")
La salida de este código será:
Juan estudia en la especialidad de Electricidad y su habilidad especial es Soldadura.
María estudia en la especialidad de Mecánica y su habilidad especial es Dibujo técnico.
Pedro estudia en la especialidad de Electrónica y no tiene habilidad especial.
En este caso, estamos utilizando un bucle
for
para iterar sobre la lista de diccionariosestudiantes
. En cada iteración, la variableestudiante
contiene un diccionario con los datos de un estudiante en particular.Luego, accedemos a los valores asociados a las claves "nombre", "especialidad" y "habilidad especial" para imprimir el nombre, la especialidad y la habilidad especial de cada estudiante.
Además, utilizamos una estructura condicional
if
para verificar si el estudiante tiene una habilidad especial o no. Si no tiene, imprimimos un mensaje indicando que no tiene habilidad especial. Si tiene, imprimimos un mensaje indicando cuál es su habilidad especial.De esta manera, podemos imprimir los nombres, especialidades y habilidades especiales de los estudiantes en la lista de diccionarios en un solo bucle, y además, mostrar un mensaje personalizado según la situación de cada estudiante.
En este caso, estamos utilizando f-strings para formatear la salida en pantalla de una manera más legible y eficiente.
Buscando estudiantes en la lista de diccionarios
Ahora bien, con 3 estudiantes la búsqueda resulta "inmediata" para el ojo humano. Pero, supongamos que el diccionario es muy grande y contiene miles de estudiantes y queremos buscar a un estudiante específico, ¿cómo sabremos dónde buscarlo? ¿Podremos ordenar nuestro diccionario, por orden alfabético o numérico tal vez, para que la búsqueda sea fácil, rápida y efectiva?
La respuesta rápida es sí. Una de las características de Python es la manipulación eficiente de estructuras de datos como los diccionarios, por ejemplo. Incluso si son muy grandes, Python encontrará rápidamente los datos que nos propongamos buscar. El lenguaje está pensado y desarrollado para esto.
Más adelante estudiaremos métodos asociados a la estructura de datos y técnicas para obtener los datos rápidamente, ordenaros, filtrarlos y realizar operaciones de alto rendimiento.
Conclusiones
Con esto, hemos aprendido cómo iterar sobre una lista de diccionarios en Python y cómo acceder a los valores de cada diccionario para procesar la información contenida en ellos.