1. Faro

Nivel 3 · Actualiza la hoja de existencias

La solicitud

De Debra Marshall, Gerente de Almacén

“Actualización rápida de existencias: acaban de llegar 20 lámparas de pie de latón, esta mañana vendimos 5 mesas auxiliares de roble, y hemos empezado a vender un juego de tazas de gres, con 48 en existencia.”

Tu objetivo

Actualiza stock para que Brass Floor Lamp suba en 20, Oak Side Table baje en 5 y una nueva clave 'Stoneware Mug Set' tenga 48. Asigna a result el diccionario actualizado (los cuatro productos).

  • Guarda un dict en resultpendiente

Tu código

Python

Cargando el editor…

    ResultadoPresiona Ejecutar para ver el tuyo

    Mote revisa tu resultado

    Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

    La lección

    Buscar cosas por nombre

    Una lista encuentra elementos por posición. Un diccionario (dict) los encuentra por una clave que tú eliges. Se escribe con llaves y pares clave: valor:

    stock = {
        "Oak Side Table": 14,
        "Brass Floor Lamp": 0,
        "Linen Throw Pillow": 37,
    }
    
    stock["Oak Side Table"]     # 14

    Piénsalo como una tabla de búsqueda de dos columnas. Las claves son únicas: un producto, una cantidad en existencia. Las claves suelen ser strings o números; los valores pueden ser cualquier cosa, incluidas listas u otros diccionarios.

    Cambiar y añadir

    Asignar a una clave la actualiza si existe y la añade si no existe:

    stock["Brass Floor Lamp"] = 20      # update
    stock["Oak Side Table"] -= 5        # change relative to the current value
    stock["Stoneware Mug Set"] = 48     # new key

    del stock["Linen Throw Pillow"] elimina una clave, y "Oak Side Table" in stock comprueba si una clave existe (True o False).

    Claves que faltan

    Leer una clave que no existe lanza un KeyError:

    stock["Walnut Bookshelf"]       # KeyError: 'Walnut Bookshelf'

    Cuando una clave puede faltar, usa .get, que devuelve un valor por defecto en lugar de fallar:

    stock.get("Walnut Bookshelf", 0)   # 0
    stock.get("Oak Side Table", 0)     # 9 after the sale

    .get es la forma segura de leer datos que no creaste tú, como la respuesta de una API o una fila de un archivo en la que algunos campos pueden estar ausentes.

    Recorrer un diccionario

    .items() te da cada clave y su valor juntos, que es el bucle que más escribirás:

    for product, count in stock.items():
        if count == 0:
            print(f"{product} is out of stock")

    .keys() y .values() dan solo un lado, así que sum(stock.values()) es el número total de unidades disponibles.

    Orden e igualdad

    Desde Python 3.7, los diccionarios recuerdan el orden en que insertaste las claves, lo que hace que la salida impresa sea predecible. Dos diccionarios son iguales cuando tienen las mismas claves con los mismos valores, sin importar el orden, así que {"a": 1, "b": 2} == {"b": 2, "a": 1} es True.

    Por qué les importan a los analistas

    Los diccionarios aparecen en todas partes: una fila de datos, un registro JSON de una API web, una correspondencia de códigos a etiquetas ({"WEB": "web", "APP": "app"}), un conjunto de parámetros para una función. pandas también los usa, por ejemplo para renombrar columnas o para asignar valores en una columna.

    Errores comunes

    • Usar corchetes para leer una clave que puede no existir. Usa .get con un valor por defecto.
    • Erratas en las claves. "Oak side table" es una clave distinta de "Oak Side Table", así que asignarle crea en silencio un cuarto producto.
    • Esperar que result = stock haga una copia. Ambos nombres apuntan al mismo diccionario, así que un cambio posterior en stock también se ve en result. Usa stock.copy() cuando necesites uno separado.

    Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.