🧠Comprensiones en Python
🎯 Objetivo general
Aprender a usar list, set y dict comprehension para:
🔹 Escribir código más claro y conciso
🔹 Evitar duplicados con sets
🔹 Agrupar información sin perder legibilidad
🔹 Reducir líneas sin alterar la lógica
🔍 1. ¿Qué son las comprensiones?
Son atajos sintácticos para crear listas, conjuntos o diccionarios a partir de bucles y condiciones.
💬 Piensa en ellas como una forma de decir:
➡️ “Toma cada elemento, filtra y transforma en una sola expresión.”
📦 Tipos:
- list comprehension → crea listas [ ]
- set comprehension → crea conjuntos { }
- dict comprehension → crea diccionarios {clave: valor}
🧩 2. Extraer fuentes únicas con set comprehension
🟡 Concepto clave
Un set mantiene solo valores únicos → elimina duplicados automáticamente.
🔸 Versión tradicional
def get_sources_traditional(articles):
sources = set()
for article in articles:
source = article.get('source')
if source and source.get('name'):
sources.add(source['name'])
return sources
🧠 Lógica:
- get() evita errores si falta la clave.
- add() inserta la fuente en el conjunto.
- Se eliminan duplicados de forma natural.
⚡ Versión con set comprehension
def get_sources(articles):
return {
a['source']['name']
for a in articles
if a.get('source') and a['source'].get('name')
}
📘 Lectura:
- { expresión for elemento in iterable if condición }
- Más limpia, menos código, misma lógica.
💡 Comprobación:
Imprime ambos resultados: si hay fuentes repetidas, el set mostrará una sola vez cada una.
🧩 3. Categorizar artículos por fuente
Queremos agrupar artículos según su fuente → cada fuente será una clave con una lista de artículos.
🔸 Versión tradicional
def categorize_traditional(articles):
sources = get_sources(articles)
results = {}
for source in sources:
if source not in results:
results[source] = []
for article in articles:
art_source = article.get('source')
name = art_source.get('name') if art_source else None
if name == source:
results[source].append(article)
return results
🔍 Lógica paso a paso:
- Obtiene fuentes únicas.
- Inicializa el diccionario.
- Recorre artículos y los agrega a su fuente correspondiente.
⚡ Versión con dict y list comprehension
def categorize(articles):
return {
source: [
article
for article in articles
if article.get('source') and article['source'].get('name') == source
]
for source in get_sources(articles)
}
🎯 Ventajas:
- Código más compacto.
- Agrupación directa sin bucles anidados.
- Misma lógica, menos ruido visual.
🧭 4. Buenas prácticas
✅ Usa comprensiones para patrones de mapear y filtrar.
✅ Utiliza .get() para evitar errores de clave.
✅ Emplea set cuando necesites eliminar duplicados.
✅ Usa comprensiones anidadas para agrupar datos de forma clara.
✅ Verifica equivalencia con print() antes y después del refactor.
✅ Corrige advertencias del linter (como ruff).
✅ Comprueba que las funciones devuelvan datos correctos tras refactorizar.