Lección 14 de 45 · Colecciones y texto

Diccionarios

Deja de recordar qué significa cada posición: usa claves para que los propios datos expliquen qué contienen.

Paso a pasoClaves con intenciónAvanza a tu ritmo
Índice · Lección 14/45
Cuando una posición deja de ser una buena explicación

Imagina guardar una persona como ["Ana", 31, "Valencia"]. Funciona, pero necesitas recordar que la posición 0 es el nombre, la 1 es la edad y la 2 es la ciudad.

Un diccionario sustituye esas posiciones por claves con significado.

Evidencia de aprendizaje

Decidir si una clave debe existir obligatoriamente o puede faltar de forma normal.

Una clave responde «qué dato es este»

La misma persona, ahora con etiquetas
persona = {
    "nombre": "Ana",
    "edad": 31,
    "ciudad": "Valencia"
}

print(persona["nombre"])
print(persona["edad"])

"nombre", "edad" y "ciudad" son claves. Cada una apunta a un valor. Ya no necesitas saber en qué posición está la edad: preguntas por ella directamente.

La misma sintaxis sirve para actualizar y para añadir

Cambiar un dato y crear otro
producto = {"nombre": "Taza", "precio": 8.5}
producto["precio"] = 9.5
producto["stock"] = 12

print(producto)

Si la clave ya existe, la asignación actualiza su valor. Si no existe, se añade una nueva pareja clave-valor.

Lectura útil: producto["precio"] significa «el valor del producto identificado por la clave precio».

Clave obligatoria y clave opcional no se tratan igual

Con persona["nombre"] estás diciendo que esperas encontrar esa clave. Si no existe, Python lanza KeyError. Eso puede ser útil porque revela que tus datos no tienen la forma esperada.

Cuando una clave realmente puede faltar, get() permite dar un valor alternativo:

Un dato opcional
usuario = {"nombre": "Leo"}
print(usuario.get("telefono", "Sin teléfono"))

No uses get() para ocultar todos los errores. Úsalo cuando la ausencia de la clave sea una situación normal.

¿La clave es obligatoria o puede faltar?

Obligatoria

pedido["id"]: si falta, los datos están incompletos y KeyError te ayuda a descubrirlo.

Opcional

perfil.get("telefono", "Sin teléfono"): la ausencia es una situación prevista.

Error frecuente: producto[nombre] busca el valor de una variable llamada nombre. Si la clave es texto, escribe producto["nombre"].

Completa la ficha: actualiza una clave obligatoria y añade otra. Después usa acceso directo para el nombre y get() solo para el dato opcional.

Salida esperada
Teclado · 24.9 € · 7 unidades
producto.py
La salida aparecerá aquí.

Necesito una pista
  • Ambas operaciones tienen la forma producto["clave"] = valor.
Ver una solución razonada
producto = {"nombre": "Teclado", "precio": 0}
producto["precio"] = 24.9
producto["stock"] = 7

print(f"{producto['nombre']} · {producto['precio']} € · {producto.get('stock', 0)} unidades")

El error que una lista puede esconder y un diccionario puede aclarar

Si ves código como registro[3] y tienes que buscar qué significa ese 3, quizá esos datos necesitan claves. Un diccionario no es «mejor» que una lista; simplemente es más expresivo cuando cada valor tiene un nombre propio.

Hazte esta pregunta antes de elegir estructura

¿Lo importante es la posición de los elementos o el nombre de cada dato? Para una secuencia de canciones, una lista suele encajar. Para los datos de una canción —título, artista y duración— un diccionario suele explicar mejor la intención.

Pasa a sets cuando…

puedes crear un diccionario pequeño, recuperar un valor por su clave y distinguir una clave obligatoria de una opcional.