Dictionary Comprehension con Condicionales en Python

Clase 8 de 44Curso de Python: Comprehensions, Funciones y Manejo de Errores

Contenido del curso

Funciones

Manipulación de archivos y errores

Resumen

Filtrar datos al momento de crear un diccionario es una técnica poderosa en Python. Gracias a dictionary comprehension con condicionales, puedes generar nuevos diccionarios aplicando reglas de inclusión en una sola línea de código, lo que resulta en soluciones más legibles y eficientes.

¿Cómo funciona la sintaxis de dictionary comprehension con condicionales?

La estructura parte de las llaves o curly brackets, donde defines un par clave-valor que se obtiene de un iterable. La diferencia con un dictionary comprehension simple es que al final se agrega una condición que determina qué elementos formarán parte del diccionario resultante [0:25].

La sintaxis general luce así:

python result = {key: value for key, value in iterable if condición}

Esto significa que solo los elementos que cumplan la condición serán incluidos en el nuevo diccionario.

¿Cómo filtrar un diccionario de poblaciones por valor?

El primer ejemplo parte de un diccionario que simula la población de varios países latinoamericanos con valores generados aleatoriamente mediante la librería random [1:05]. El objetivo es crear un nuevo diccionario que solo contenga los países cuya población supere cierto umbral.

python import random

countries = ['Colombia', 'México', 'Bolivia', 'Perú'] population = {country: random.randint(1, 100) for country in countries}

result = {country: population for country, population in population.items() if population > 50} print(result)

Puntos importantes de este código:

  • Se utiliza el método .items() para recorrer simultáneamente las claves y los valores del diccionario original [2:18].
  • La condición if population > 50 filtra solo los países que superan ese número [2:30].
  • Al usar random.randint(1, 100), cada ejecución puede arrojar resultados diferentes, lo que permite comprobar que el filtro funciona correctamente [3:00].

¿Cómo extraer vocales únicas de un texto con dictionary comprehension?

El segundo ejemplo trabaja con cadenas de caracteres. A partir del texto "Hola, soy Nicolás", se genera un diccionario donde cada vocal encontrada es la clave, y su versión en mayúscula es el valor [3:40].

python texto = "Hola, soy Nicolás" unique = {c: c.upper() for c in texto if c in 'aeiou'} print(unique)

Este fragmento aprovecha que una cadena de caracteres en Python es iterable, es decir, se puede recorrer letra por letra [4:10]. La condición if c in 'aeiou' asegura que solo se procesen vocales, ignorando consonantes, espacios y signos de puntuación.

¿Por qué las vocales no se repiten en el diccionario?

Un detalle clave que surge de este ejercicio es el comportamiento de las llaves únicas en los diccionarios. Aunque la letra "o" aparece tres veces en el texto, el diccionario solo contiene una entrada para ella [4:55]. Esto ocurre porque un diccionario en Python no permite claves duplicadas: cada vez que encuentra una clave existente, simplemente reemplaza el valor anterior.

Esto abre una pregunta interesante: ¿cómo podrías modificar este comprehension para que el valor sea la frecuencia de cada vocal en lugar de su versión en mayúscula? Es un reto que se puede resolver combinando el método .count() con la misma estructura.

python unique_freq = {c: texto.count(c) for c in texto if c in 'aeiou'} print(unique_freq)

¿Cuándo conviene usar dictionary comprehension con if?

Esta técnica resulta especialmente útil cuando necesitas:

  • Filtrar datos de un diccionario existente según un criterio numérico o lógico.
  • Transformar y seleccionar elementos de un iterable en un solo paso.
  • Mantener el código conciso sin sacrificar legibilidad.

La combinación de comprehension con condicionales es una herramienta fundamental para escribir Python idiomático. Si ya dominas las listas por comprensión, aplicar la misma lógica a diccionarios te permitirá manipular estructuras de datos más complejas con facilidad.

¿Has encontrado algún caso donde prefieras usar un bucle for tradicional en lugar de dictionary comprehension? Comparte tu experiencia.