Lección 08 · 02 Listas, bucles y funciones

Diccionarios: datos con nombre

Una lista guarda datos por posición; un diccionario los guarda por nombre. Es como una ficha: cliente, email, plan.

Claves y valores

cliente = {"nombre": "Lucía", "plan": "pro", "activo": True}
print(cliente["nombre"])
cliente["email"] = "[email protected]"   # añade (o cambia) una clave
print(cliente)

Si pides una clave que no existe con [], Python lanza KeyError. Con .get() obtienes None (o el valor por defecto que digas):

cliente = {"nombre": "Lucía"}
print(cliente.get("telefono"))
print(cliente.get("telefono", "sin teléfono"))

Recorrer

precios = {"básico": 9, "pro": 29, "empresa": 99}
for plan, precio in precios.items():
    print(f"{plan}: {precio} €/mes")

Contar apariciones

Un uso clásico: cuántas veces sale cada cosa.

categorias = ["ventas", "incidencia", "ventas", "otros", "ventas"]
cuenta = {}
for c in categorias:
    cuenta[c] = cuenta.get(c, 0) + 1
print(cuenta)

Listas de diccionarios

Así llegan casi todos los datos de una API o de un modelo: una lista de fichas.

pedidos = [{"id": 1, "total": 40}, {"id": 2, "total": 120}]
for p in pedidos:
    print(p["id"], p["total"])
// reto 01

Completa la ficha

Añade al diccionario ticket la clave "estado" con el valor "abierto" y cambia "prioridad" a "alta". Imprime el diccionario.

main.py
Ctrl/⌘ + Enter
¿Atascado? Ver pista

ticket["estado"] = "abierto" y ticket["prioridad"] = "alta".

$ python main.py
    // reto 02

    Cuenta por categoría

    Crea el diccionario cuenta con cuántas veces aparece cada categoría de etiquetas. Imprímelo.

    main.py
    Ctrl/⌘ + Enter
    ¿Atascado? Ver pista

    Recorre la lista y en cada vuelta: cuenta[e] = cuenta.get(e, 0) + 1.

    $ python main.py
      // reto 03

      Facturación por cliente

      Suma el importe de las facturas de cada cliente en el diccionario por_cliente (cliente → total). Imprímelo.

      main.py
      Ctrl/⌘ + Enter
      ¿Atascado? Ver pista
      for f in facturas:
          por_cliente[f["cliente"]] = por_cliente.get(f["cliente"], 0) + f["importe"]
      $ python main.py