Comprensión del diccionario de Python

En este tutorial, aprenderemos sobre la comprensión del diccionario de Python y cómo usarlo con la ayuda de ejemplos.

Los diccionarios son tipos de datos en Python que nos permiten almacenar datos en un par clave / valor . Por ejemplo:

 my_dict = (1: 'apple', 2: 'ball') 

Para obtener más información sobre ellos, visite: Diccionario de Python

¿Qué es la comprensión de diccionario en Python?

La comprensión de diccionarios es una forma elegante y concisa de crear diccionarios.

Ejemplo 1: Comprensión de diccionario

Considere el siguiente código:

 square_dict = dict() for num in range(1, 11): square_dict(num) = num*num print(square_dict) 

Ahora, creemos el diccionario en el programa anterior usando la comprensión del diccionario.

 # dictionary comprehension example square_dict = (num: num*num for num in range(1, 11)) print(square_dict) 

La salida de ambos programas será la misma.

 (1: 1, 2: 4, 3: 9, 4:16, 5:25, 6:36, 7:49, 8:64, 9: 81, 10: 100)

En ambos programas, hemos creado un diccionario square_dictcon un par clave / valor de número cuadrado .

Sin embargo, usar la comprensión del diccionario nos permitió crear un diccionario en una sola línea .

Uso de la comprensión del diccionario

En el ejemplo anterior, podemos ver que la comprensión del diccionario debe escribirse en un patrón específico.

La sintaxis mínima para la comprensión del diccionario es:

 diccionario = (clave: valor para vars en iterable) 

Comparemos esta sintaxis con la comprensión del diccionario del ejemplo anterior.

Ahora, veamos cómo podemos usar la comprensión del diccionario usando datos de otro diccionario.

Ejemplo 3: Cómo utilizar la comprensión de diccionario

 #item price in dollars old_price = ('milk': 1.02, 'coffee': 2.5, 'bread': 2.5) dollar_to_pound = 0.76 new_price = (item: value*dollar_to_pound for (item, value) in old_price.items()) print(new_price) 

Salida

 ('leche': 0,7752, 'café': 1,9, 'pan': 1,9) 

Aquí, podemos ver que recuperamos los precios de los artículos en dólares y los convertimos a libras. El uso de la comprensión del diccionario hace que esta tarea sea mucho más simple y breve.

Condicionales en la comprensión del diccionario

Podemos personalizar aún más la comprensión del diccionario añadiéndole condiciones. Veamos un ejemplo.

Ejemplo 4: Si la comprensión del diccionario condicional

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) even_dict = (k: v for (k, v) in original_dict.items() if v % 2 == 0) print(even_dict) 

Salida

 ('jack': 38, 'michael': 48) 

Como podemos ver, solo se han agregado los ítems con valor par, por la ifcláusula en la comprensión del diccionario.

Ejemplo 5: Comprensión de diccionario múltiple si condicional

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) new_dict = (k: v for (k, v) in original_dict.items() if v % 2 != 0 if v < 40) print(new_dict) 

Salida

 ('juan': 33) 

En este caso, solo los elementos con un valor impar de menos de 40 se han agregado al nuevo diccionario.

Es debido a las múltiples ifcláusulas en la comprensión del diccionario. Son equivalentes al andfuncionamiento en el que ambas condiciones deben cumplirse.

Ejemplo 6: comprensión del diccionario condicional if-else

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) new_dict_1 = (k: ('old' if v> 40 else 'young') for (k, v) in original_dict.items()) print(new_dict_1) 

Salida

 ('jack': 'joven', 'michael': 'viejo', 'guido': 'viejo', 'john': 'joven') 

En este caso, se crea un nuevo diccionario mediante la comprensión del diccionario.

Los artículos con un valor de 40 o más tienen el valor de "viejos", mientras que otros tienen el valor de "jóvenes".

Comprensión de diccionario anidado

Podemos agregar comprensiones de diccionario a las propias comprensiones de diccionario para crear diccionarios anidados. Veamos un ejemplo.

Ejemplo 7: Diccionario anidado con dos comprensiones de diccionario

 dictionary = ( k1: (k2: k1 * k2 for k2 in range(1, 6)) for k1 in range(2, 5) ) print(dictionary) 

Salida

 (2: (1: 2, 2: 4, 3: 6, 4: 8, 5: 10), 3: (1: 3, 2: 6, 3: 9, 4: 12, 5: 15), 4: (1: 4, 2: 8, 3: 12, 4: 16, 5: 20)) 

As you can see, we have constructed a multiplication table in a nested dictionary, for numbers from 2 to 4.

Whenever nested dictionary comprehension is used, Python first starts from the outer loop and then goes to the inner one.

So, the above code would be equivalent to:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = (k2: k1*k2 for k2 in range(1, 6)) print(dictionary) 

It can further be unfolded:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = dict() for k2 in range(1, 6): dictionary(k1)(k2) = k1*k2 print(dictionary) 

All these three programs give us the same output.

Advantages of Using Dictionary Comprehension

As we can see, dictionary comprehension shortens the process of dictionary initialization by a lot. It makes the code more pythonic.

Using dictionary comprehension in our code can shorten the lines of code while keeping the logic intact.

Warnings on Using Dictionary Comprehension

Aunque las comprensiones de diccionario son excelentes para escribir código elegante y fácil de leer, no siempre son la opción correcta.

Debemos tener cuidado al usarlos como:

  • A veces pueden hacer que el código se ejecute más lento y consuman más memoria.
  • También pueden disminuir la legibilidad del código.

No debemos intentar encajar una lógica difícil o una gran cantidad de comprensión de diccionario dentro de ellos solo por hacer el código de una sola línea. En estos casos, es mejor elegir otras alternativas como bucles.

Articulos interesantes...