La solicitud

De Thomas Whitaker, Director de Merchandising
Tu objetivo
Asigna a result una lista con los valores de name de los productos cuya categoría es 'Lighting' y cuyo precio es menor que 100, en el mismo orden que en products.
- Guarda una lista de 3 en
resultpendiente
Tu código
Cargando el editor…
Solución de referencia
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Thomas, y por qué
La lección
Una lista de diccionarios es una tabla
Mira products: una lista donde cada elemento es un diccionario con las mismas claves. Eso es una
tabla disfrazada. Cada diccionario es una fila y cada clave es una columna. También es exactamente la
forma que obtienes de la mayoría de las APIs web y los archivos JSON, así que la verás a menudo antes
de que los datos lleguen a pandas.
La forma con bucle
Ya sabes filtrar con un bucle y un acumulador:
names = []
for p in products:
if p["category"] == "Lighting" and p["price"] < 100:
names.append(p["name"])
Cuatro líneas, y la intención real (conservar los nombres de la iluminación barata) está repartida en todas ellas.
La forma con comprehension
Una list comprehension dice lo mismo en una sola expresión:
names = [p["name"] for p in products if p["category"] == "Lighting" and p["price"] < 100]
Léela en tres partes:
p["name"]: lo que entra en la lista nueva.for p in products: de dónde vienen los elementos.if ...: qué elementos conservar (opcional).
El resultado es siempre una lista nueva. El orden se conserva, porque recorre products de principio a
fin. Para condiciones largas, repartirlas en varias líneas dentro de los corchetes es perfectamente
válido y más fácil de leer.
Transformar además de filtrar
La primera parte puede ser cualquier expresión, así que las comprehensions también remodelan datos:
[p["price"] * 0.8 for p in products] # every price with 20% off
[p["name"].upper() for p in products] # names in capitals
[round(p["price"] * 1.08, 2) for p in products if p["category"] == "Kitchen"]
También hay comprehensions de diccionario, que construyen una tabla de búsqueda de una vez:
price_by_name = {p["name"]: p["price"] for p in products}
price_by_name["Oak Side Table"] # 149.0
Cuidado con el límite
«Menos de $100» significa estrictamente por debajo, así que < 100. El Edison Bulb Pack de exactamente
100.00 debe quedar fuera, y el Glass Wall Sconce de 99.99 debe quedarse. Cuando un encargo dice «hasta»
o «como máximo», eso se convierte en <=. Lee con cuidado la redacción; los valores del borde son
justo lo que revisan los revisores.
Cuándo no usarla
Las comprehensions sirven para construir una lista. Si necesitas varios pasos por elemento, manejo de errores, o ni siquiera estás recogiendo resultados (solo imprimiendo, por ejemplo), un bucle normal es más claro. Una comprehension que necesita barra de desplazamiento para leerse es señal de volver a un bucle.
Errores comunes
- Poner el
ifantes delfor.[p["name"] if ... for p in products]es otra construcción (un if-else en línea) y falla sin unelse. - Comparar la categoría con otra capitalización, como
"lighting", que no coincide con nada. - Escribir
p.nameen lugar dep["name"]. Los valores de un diccionario se leen con corchetes.
Una mirada hacia delante
En pandas todo este nivel se convierte en
products.loc[(products["category"] == "Lighting") & (products["unit_price"] < 100), "name"].
La misma idea, aplicada a una columna entera de una vez.
¡Linterna encendida!
Practicaste: list comprehensionfilteringdictionaries
- Resuelto
- Sin pistas
- Al primer intento
