Saltar al contenido principal
eLearner.app
Módulo 3 · Lección 3 de 411/36 en el curso~12 min
Lecciones del módulo (3/4)

Diccionarios

Un diccionario (dict) es un mapa clave → valor: asocias una clave (casi siempre una cadena) con un valor de cualquier tipo. Es la estructura de datos fundamental para modelar entidades del mundo real.

Crear un diccionario

Python
vuoto = {}
utente = {"nome": "Ada", "anni": 36, "attivo": True}
# constructor alternativo
utente = dict(nome="Ada", anni=36, attivo=True)

Las claves deben ser hashables (inmutables): cadenas, números, tuplas de elementos hashables. Los valores, por otro lado, pueden ser cualquier cosa — incluso otros diccionarios.

Acceso, modificación, eliminación

Python
utente["nome"]            # 'Ada'
utente["email"]           # ¡KeyError!
utente.get("email")       # None       (valor por defecto seguro)
utente.get("email", "—")  # '—'        (valor por defecto personalizado)
utente["citta"] = "Roma"  # añade / actualiza
del utente["attivo"]      # elimina

Iterar sobre un diccionario

Python
for chiave in utente:               # itera sobre las CLAVES (comportamiento por defecto)
    print(chiave, utente[chiave])

for chiave in utente.keys():        # explícito
    ...

for valore in utente.values():
    print(valore)

for chiave, valore in utente.items():    # el idioma más común
    print(f"{chiave} = {valore}")

El orden de iteración es el orden de inserción (garantizado desde Python 3.7 en adelante).

¿Existe la clave?

Python
"nome" in utente     # True
"email" in utente    # False     (¡NO usa el valor, usa la clave!)

setdefault: inicializar en el primer acceso

Un patrón común: "si la clave no existe, pon el valor por defecto; en cualquier caso, devuelve el valor actual".

Python
gruppi = {}
for nome in ["Ada", "Linus", "Ada", "Grace", "Linus", "Ada"]:
    gruppi.setdefault(nome, []).append(1)
# {'Ada': [1, 1, 1], 'Linus': [1, 1], 'Grace': [1]}

También existe collections.Counter para el caso específico de contar (lo veremos en el módulo de la biblioteca estándar).

Iterar sobre diccionarios

Puedes iterar sobre un diccionario de varias formas:

  • for k in d: itera solo sobre las claves (comportamiento por defecto).
  • for k, v in d.items(): itera sobre los pares clave-valor simultáneamente (muy útil).
  • for v in d.values(): itera solo sobre los valores.

Pruébalo tú

Ejercicio#python.m3.l3.e1
Intentos: 0Cargando...

Dado `user = {'nome': 'Ada', 'anni': 36}`, añade la clave 'email' = 'ada@ex.com' y luego asigna a `email_or_default` el valor de la clave 'telefono' usando .get con valor por defecto 'sconosciuto'. Evalúa `email_or_default`.

Cargando editor...
Mostrar pista

.get('telefono', 'sconosciuto') no lanza KeyError.

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#python.m3.l3.e2
Intentos: 0Cargando...

Dado `prices = {'mela': 1.2, 'pera': 1.5, 'kiwi': 2.0}`, calcula la suma de todos los valores y asígnala a `total`. Evalúa `total`.

Cargando editor...
Mostrar pista

sum(prices.values()) suma todos los valores.

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#python.m3.l3.e3
Intentos: 0Cargando...

Dado el diccionario `user = {'name': 'Alice'}`, usa el método `.get()` para recuperar el valor de la clave `'role'`. Si la clave no existe, haz que devuelva el valor por defecto `'guest'`. Guarda el resultado en `user_role` y evalúalo.

Cargando editor...
Mostrar pista

El método get acepta un segundo parámetro como alternativa: user.get('role', 'guest').

Solución disponible después de 3 intentos