La solicitud

De Megan Collins, Directora de Ventas
Tu objetivo
Paso 1 de 3. Asigna a result una lista con los valores de order_id de los pedidos cuyo estado es 'completed', en su orden original.
- Guarda una lista de 4 en
resultpendiente
Paso 2 de 3. Asigna a result un diccionario que asocie el order_id de cada pedido completado con su total (suma de cantidad por unit_price de sus items), con cada total redondeado a 2 decimales.
- Guarda un dict en
resultpendiente
Paso 3 de 3. Asigna a result un diccionario que asocie cada canal con los ingresos totales de sus pedidos completados, redondeados a 2 decimales. Solo aparecen los canales con al menos un pedido completado.
- Guarda un dict en
resultpendiente
Paso 1 · 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.
Paso 2 · 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.
Paso 3 · 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 Megan, y por qué
La lección
Datos anidados
Las exportaciones reales rara vez son planas. Aquí cada pedido es un diccionario, y uno de sus valores,
items, es a su vez una lista de pares (quantity, unit_price). Es un pedido con muchas líneas, la
misma relación que tienen orders y order_items en la base de datos de Harbor & Pine.
Para trabajar con datos anidados, pela una capa a la vez:
order = orders[0]
order["items"] # [(2, 49.99), (1, 34.0)]
order["items"][0] # (2, 49.99)
qty, price = order["items"][0] # unpack the pair
Una pareja entre paréntesis es una tupla: como una lista, pero fija una vez creada. Las tuplas son habituales para grupos pequeños de valores que van juntos.
Paso 1: filtrar
Esto lo hiciste en el nivel anterior. Una comprehension con una condición conserva los ID de los pedidos completados:
[o["order_id"] for o in orders if o["status"] == "completed"]
Los pedidos cancelados, reembolsados y pendientes no son ingresos. Decidir qué estados cuentan es una decisión de negocio; indícalo siempre en tu respuesta para que nadie compare tu número con uno que incluye reembolsos.
Paso 2: calcular el total de cada pedido
El total de un pedido es la suma de sus líneas. sum() acepta una expresión generadora, una
comprehension sin los corchetes, así que no necesitas construir una lista temporal:
sum(qty * price for qty, price in order["items"])
Envuélvela en una comprehension de diccionario y obtienes una tabla de búsqueda del ID del pedido a su total, para todos los pedidos completados de una vez.
Paso 3: agrupar y sumar
Los ingresos por canal son el patrón de conteo de antes, salvo que sumas el total del pedido en lugar de 1:
revenue = {}
for o in orders:
if o["status"] != "completed":
continue
total = sum(qty * price for qty, price in o["items"])
revenue[o["channel"]] = revenue.get(o["channel"], 0) + total
continue salta directamente al siguiente pedido. Es una forma ordenada de descartar filas pronto en
lugar de anidar el resto del cuerpo dentro de un if.
Redondea al final, una sola vez por canal. Luego comprueba: los totales de los canales deben sumar la suma de los totales de pedido del paso 2. Contrastar dos números calculados de maneras distintas es uno de los hábitos más baratos y eficaces que puede tener un analista.
Lo que acabas de hacer
Filtrar filas, calcular un valor por fila, agrupar por una categoría y sumar. Esa es la forma de una enorme parte de los informes de negocio. En el capítulo 6 harás lo mismo con 30,000 líneas de pedido en pandas en dos líneas de código, y sabrás exactamente qué hacen esas dos líneas.
Errores comunes
- Sumar los precios unitarios sin multiplicar por la cantidad.
- Olvidar filtrar los pedidos cancelados y reembolsados en el paso 3.
- Redondear cada pedido antes de sumarlo al canal, lo que puede desviar el total un centavo.
¡Linterna encendida!
Practicaste: list comprehensiondictionariesnested dataaccumulator
- Resuelto
- Sin pistas
- Al primer intento
