Sintaxis de list, dict y set comprehensions en Python
Clase 3 de 25 • Curso de Python: Entornos virtuales, PEP8 y Manejo de Errores
Resumen
Domina cómo escribir código más pythónico transformando bucles anidados en una sola línea con list comprehension, dict comprehension y set comprehension. Verás cómo refactorizar desde un for tradicional, aplicar filtros con if, usar len para validaciones y construir objetos más claros y legibles.
¿Qué son las comprehensions en Python y para qué sirven?
Las comprehensions permiten crear listas, diccionarios y conjuntos de forma compacta y legible. En lugar de acumular valores con variables temporales y múltiples líneas, condensas la iteración, el mapeo y el filtro en una expresión clara.
- Generan el mismo resultado que un for tradicional, con menos código.
- Mejoran la lectura: menos ruido y menos variables temporales.
- Soportan condiciones directamente en la expresión.
¿Qué piezas componen la sintaxis de una list comprehension?
- Expresión de salida: qué valor quieres en la lista.
- Iteración: el for que recorre los elementos.
- Filtro opcional: un if para incluir o excluir.
¿Cómo refactorizar un for tradicional a una list comprehension?
Primero, extraer títulos con un for acumulando en una lista.
def extract_titles_traditional(articles):
"""Extrae solo los títulos usando un for."""
titles = []
for article in articles:
titles.append(article["title"]) # iteración + acumulación
return titles
Ahora, la misma lógica con list comprehension y retorno en una línea.
def extract_titles(articles):
"""Extrae solo los títulos usando un comprehension."""
return [article["title"] for article in articles]
- Resultado idéntico en consola al imprimir ambos llamados.
- Más limpio y directo: la firma de la función no cambia, solo la implementación.
¿Qué ventajas aporta la sintaxis compacta y el retorno en una línea?
- Menos probabilidad de errores por variables intermedias.
- Intención clara: mapeo de artículos a títulos.
- Compatible con herramientas de formato automático, por ejemplo, Ruff ordena la expresión para mayor legibilidad.
¿Cómo aplicar filtros con if y construir objetos con dict comprehension?
Puedes incluir validaciones en la misma línea. Por ejemplo, extraer solo títulos con al menos 10 caracteres usando len y un if al final.
def extract_titles_long(articles):
return [a["title"] for a in articles if len(a["title"]) > 10]
Para crear un diccionario a partir de los artículos, usa dict comprehension: cada entrada tendrá llave y valor. Por ejemplo, título como llave y descripción como valor, filtrando por descripciones de longitud mínima.
# Filtra descripciones largas y construye un dict título -> descripción
long_desc_by_title = {
a["title"]: a["description"]
for a in articles
if len(a["description"]) > 20 # puede devolver vacío si ninguna cumple
}
# Ajusta el umbral si necesitas resultados visibles
by_title_min5 = {a["title"]: a["description"] for a in articles if len(a["description"]) > 5}
- El if en list y dict comprehensions va al final de la expresión.
- Si el filtro es muy estricto, el resultado puede ser vacío; reduce el umbral y vuelve a ejecutar.
¿Cómo crear un conjunto de fuentes únicas con set comprehension?
Reto propuesto: construir un conjunto de fuentes sin duplicados. Empieza con el enfoque tradicional y luego refactoriza.
# Forma tradicional
def unique_sources_traditional(articles):
sources = set()
for a in articles:
sources.add(a["source"]) # evita duplicados de manera natural
return sources
# Con set comprehension
def unique_sources(articles):
return {a["source"] for a in articles}
- Un set elimina duplicados automáticamente.
- La set comprehension condensa iteración y recolección en una sola línea.
¿Tienes tu solución al reto u otra variación con filtros en dict o list comprehensions? Compártela en los comentarios para impulsar la discusión y ayudar a otros estudiantes.