Cómo iterar sobre un diccionario en Python

En este tutorial, veremos cómo iterar a través de un diccionario en Python, usando claves(), valores() y elementos() y un bucle for, con ejemplos.

Introducción

Los diccionarios son una de las estructuras de datos más utilizadas en todo el desarrollo de software, y por una buena razón. Nos permiten almacenar nuestros datos en pares ordenados clave, valor, lo que a su vez nos da la capacidad de, en promedio, acceder a nuestros datos en tiempo O(1).

Al usar un diccionario es importante saber cómo iterar sobre él. No poder recuperar los datos que almacenó lo hace prácticamente inútil.

En este artículo, veremos cómo iterar a través de un diccionario de Python con todo tipo de iteradores y el bucle for.

Usando el método keys()

Los diccionarios de Python tienen un método útil que nos permite iterar fácilmente a través de todas las claves inicializadas en un diccionario, keys().

Tenga en cuenta que desde Python 3, este método no devuelve una lista, sino que devuelve un objeto de vista. Un objeto de vista es exactamente como su nombre indica, una vista de algunos datos.

Esto significa que podemos iterar a través de dichos datos sin problema, pero si realmente queremos almacenar la lista de claves, debemos materializarla. Lo cual se puede hacer fácilmente reenviando el objeto de vista proporcionado a un constructor de lista.

Echemos un vistazo a cómo funciona todo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3}

# Here we're just 'looking' at the keys,
# we're not actually constructing a list 
# out of them
key_view = my_dict.keys()
print("Key view:", key_view)
print("Type:", type(key_view),end="\n\n")

# Here we're materializing the keys
# into a list ofo keys
key_list = list(my_dict.keys())
print("Key list:", key_list)
print("Type: ", type(key_list),end="\n\n")

# And as we can see, view can be easily be
# used for iterating over a dictionary
for key in my_dict.keys():
    print(key, ':', my_dict[key]) 

Ejecutar el código nos da el siguiente resultado:

1
2
3
4
5
6
7
8
9
Key view: dict_keys(['alpha', 'beta', 'gamma'])
Type: <class 'dict_keys'>

Key list: ['alpha', 'beta', 'gamma']
Type:  <class 'list'>

alpha : 5
beta : 4
gamma : 3 

Una forma alternativa de hacerlo sería:

1
2
3
4
my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3}

for key in my_dict:
    print(key, ':', my_dict[key])

Cuando se usa la palabra clave in junto con un diccionario, el diccionario invoca su método __iter__(). Este método luego devuelve un iterador que se usa para pasar implícitamente por las claves del diccionario proporcionado.

Uso del método valores()

Al igual que el método keys(), el método values() también devuelve un objeto de vista, pero en lugar de iterar a través de claves, itera a través de valores:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3}

# Inspecting the view of the values
# in the dictionary
key_list = list(my_dict.values())
print("Value list:", key_list)
print("Type: ", type(key_list), end="\n\n")

for value in my_dict.values():
    print(value, end=" ")

Ejecutar el código nos da el siguiente resultado:

1
2
3
Value list: [5, 4, 3]
Type:  <class 'list'>
5 4 3 

A diferencia del método anterior, este solo proporciona valores. Es útil cuando no te preocupan las llaves.

Usando el método items()

Al igual que los métodos keys() y values(), el método items() también devuelve un objeto de vista, pero en lugar de solo iterar a través de keys o values, itera a través de (key ,valor) pares.

Echemos un vistazo a cómo funciona todo:

1
2
3
4
5
6
7
8
9
my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3}

# Inspecting the view of the (key,value) pairs
key_list = list(my_dict.items())
print("(key,value) pair list:", key_list)
print("Type: ", type(key_list), end="\n\n")

for item in my_dict.items():
    print(item, end=" ")

Ejecutar el código nos da el siguiente resultado:

1
2
3
(key,value) pair list: [('alpha', 5), ('beta', 4), ('gamma', 3)]
Type:  <class 'list'>
('alpha', 5) ('beta', 4) ('gamma', 3) 

Para asignar inmediatamente claves y valores simultáneamente, podemos usar desempaquetado de tuplas y extraerlos usando variables para cada valor en una tupla:

1
2
for key, value in my_dict.items():
    print(key,':',value)

Es importante tener en cuenta que en las versiones anteriores de Python 2, items(), keys() y values() devolvían una copia de los datos de un diccionario. Mientras que en * Python 3 * devuelven un objeto de vista.

Estos son más efectivos ya que proporcionan una vista dinámica y, además, si se realizan cambios en el diccionario original, se reflejarán inmediatamente en el objeto de vista (y viceversa).

Conclusión

En este artículo, hemos cubierto diferentes formas de iterar sobre un diccionario de Python. Esto incluye los métodos keys(), values() y items(), con un bucle for.

Licensed under CC BY-NC-SA 4.0