Saltar a contenido

Iterando con diccionarios

Recordemos nuestro diccionario de estudiantes:

Python
# Diccionario de estudiantes
estudiantes = {
    'Juan': 'Electricidad',
    'María': 'Mecánica',
    'Pedro': 'Electrónica'
}

En este momento tiene tres elementos, cada uno con una clave y un valor. Pero, ¿cómo podemos acceder a estos elementos de manera más eficiente? ¿Cómo podemos imprimir cada estudiante y su especialidad sin tener que escribir una línea de código por cada uno de ellos? O mejor aún, ¿cómo podemos hacerlo sin saber cuántos estudiantes hay en el diccionario?

Supongamos que aplicamos la misma metodología que utilizamos con las listas:

Python
# Diccionario de estudiantes
estudiantes = {
    'Juan': 'Electricidad',
    'María': 'Mecánica',
    'Pedro': 'Electrónica'
}

# Iterando sobre el diccionario
for estudiante in estudiantes:
    print(estudiante)

¿Qué crees que sucederá si ejecutamos este código?

Haz clic aquí para descubrirlo.

El código imprimirá solo los nombres de los estudiantes, pero no sus especialidades. Esto se debe a que, por defecto, un bucle for itera sobre las claves del diccionario, no sobre los valores.

Terminal (Entrada/Salida)
Juan
María
Pedro

Accediendo a los valores de un diccionario en un bucle

Para acceder a los valores de un diccionario en un bucle, podemos hacer lo siguiente:

Python
# Diccionario de estudiantes
estudiantes = {
    'Juan': 'Electricidad',
    'María': 'Mecánica',
    'Pedro': 'Electrónica'
}

# Iterando sobre el diccionario
for estudiante in estudiantes:
    print(estudiante, estudiantes[estudiante])

La salida de este código será:

Terminal (Entrada/Salida)
Juan Electricidad
María Mecánica
Pedro Electrónica

En este caso, estamos utilizando un bucle for para iterar sobre las claves del diccionario estudiantes. Luego, accedemos a cada valor utilizando la clave correspondiente.

En cada iteración, la variable estudiante contiene la clave actual, y estudiantes[estudiante] nos da el valor asociado a esa clave.

De esta manera, podemos imprimir tanto las claves como los valores del diccionario en un solo bucle.

Optimizando la la salida en pantalla

Vamos a mejorar un poco el programa:

``` py title="Python" linesnums="1" hl_lines="10"

Diccionario de estudiantes

estudiantes = { 'Juan': 'Electricidad', 'María': 'Mecánica', 'Pedro': 'Electrónica' }

Iterando sobre el diccionario

for estudiante in estudiantes: print(estudiante, estudiantes[estudiante], sep=' estudia en la especialidad de ')

La salida de este código será:

``` py title="Terminal (Entrada/Salida)"
Juan estudia en la especialidad de Electricidad
María estudia en la especialidad de Mecánica
Pedro estudia en la especialidad de Electrónica

En este caso, estamos utilizando la función print() para imprimir el nombre del estudiante, seguido de la frase "estudia en la especialidad de", y finalmente la especialidad del estudiante.

También podríamos haber resuelto la línea 10 de la siguiente manera:

Python
print(estudiante + " estudia en la especialidad de " + estudiantes[estudiante]")

O mejor, a mi criterio, utilizando f-strings:

Python
print(f"{estudiante} estudia en la especialidad de {estudiantes[estudiante]}")

En cualquier caso, el resultado hubiera sido el mismo.

Conclusiones

Cuando se usa un bucle for con un diccionario, lo que sucede es lo siguiente:

Nombre Especialidad
Juan Electricidad
María Mecánica
Pedro Electrónica

``` py title="Python" linesnums="1" hl_lines="10"

Diccionario de estudiantes

estudiantes = { 'Juan': 'Electricidad', 'María': 'Mecánica', 'Pedro': 'Electrónica' }

Iterando sobre el diccionario

for estudiante in estudiantes: print(estudiante, estudiantes[estudiante], sep=' estudia en la especialidad de ') ```

La variable que controla el bucle irá almacenando cada una de las claves almacenadas en el diccionario.

En este caso, la variable estudiante (la llamamos así porque tiene sentido manipular un estudiante a la vez) irá tomando los valores 'Juan', 'María' y 'Pedro' en cada iteración del bucle; al igual que como lo ha hecho con los números de las listas de nuestros ejemplos anteriores.

Por lo tanto, es muy similar en espíritu a iterar con un bucle for sobre una lista, pero en lugar de iterar sobre la ubicación numérica, índice o index en inglés, itera sobre las claves (primera columna) de la tabla de arriba.