Un diccionario es una tabla de búsqueda
Las listas se indexan por posición. Los diccionarios se indexan por clave — normalmente un string o un número — y cada clave mapea a un valor. Ese cambio solo desbloquea una categoría enorme de programas: inventarios, configuraciones, payloads JSON, perfiles de usuario, cachés.
Las claves y los valores pueden ser casi cualquier cosa. Las claves deben ser hasheables (así que: números, strings, tuplas; no listas u otros dicts). Los valores no tienen restricción — un dict puede contener cualquier cosa, incluidos otros dicts o listas.
Crear diccionarios
Varias formas, cada una con su sitio:
Leer valores
Dos formas, y la elección importa:
Elige por intención:
- Usa
[]cuando la clave deba estar. Si no está, es un bug y quieres el error ruidoso. - Usa
.get()cuando "no presente" sea un caso válido. Te deja escribir valores por defecto sin try/except.
Añadir, actualizar, borrar
Asignar a una clave la crea o la actualiza:
update() fusiona otro dict o iterable de pares:
Las claves compartidas en overrides sobrescriben las de settings.
Comprobar una clave
in comprueba las claves, no los valores:
Para comprobar valores específicamente, usa user.values():
Cómo iterar un diccionario
Tienes tres vistas sobre las que puedes iterar:
.items() es lo que usarás la mayor parte del tiempo — te da el par, desempaquetado, listo para usar.
El orden de iteración en Python moderno (3.7+) coincide con el orden de inserción. Un dict no es una "bolsa mágica" — si añades a, luego b, luego c, iterar los devuelve en ese orden. Es una garantía del lenguaje en la que puedes confiar.
Cómo ordenar un diccionario
Los diccionarios preservan el orden de inserción, así que "ordenar" un dict realmente significa construir un nuevo dict cuyas claves se insertan en el orden que quieres:
sorted() devuelve una lista de pares; envolver eso en dict(...) reconstruye un diccionario con el nuevo orden. Si solo necesitas los pares ordenados (no un dict), sáltate la llamada externa a dict().
Cómo fusionar dos diccionarios
Python 3.9+ te da el operador |:
Los valores del dict de la derecha ganan en colisiones de clave. .update() es el equivalente in-place. En versiones más antiguas de Python, usa {**defaults, **overrides}.
El patrón setdefault
Una necesidad común: "si la clave está, usa su valor; si no, pon un default y úsalo".
O, mejor, usa collections.Counter:
Counter es una subclase de dict que cuenta por defecto. Es la elección correcta siempre que estés contando apariciones.
Dict comprehensions
Paralelas a las list comprehensions, pero para construir dicts:
Mismas reglas que las list comprehensions, pero con key: value entre las llaves.
Dict como gemelo de JSON
Los dicts de Python se alinean casi exactamente con los objetos JSON. Convertir entre ellos es una sola llamada:
Por eso los dicts aparecen por todas partes en el trabajo web — tus peticiones y respuestas de API son básicamente manipulación de dicts con algo de red en el medio.
Un ejemplo práctico
Un pequeño programa tipo configuración que guarda un perfil de usuario:
Dicts anidados, valores mutables, .get() con default — el kit básico de herramientas para cualquier dato con forma de registro.
Seguimos
Listas, tuplas, sets, dicts. Con esas cuatro colecciones en la mano, puedes modelar casi cualquier dato con el que te encuentres al principio. A continuación, aprenderemos la list comprehension — la forma compacta que tiene Python de transformar una colección en otra.
Preguntas frecuentes
¿Qué es un diccionario en Python?
Un diccionario es una colección de pares clave-valor. Buscas un valor por su clave — prices['apple'] en vez de prices[0]. Los diccionarios son rápidos para leer y escribir, las claves deben ser únicas, y en Python moderno preservan el orden en el que insertaste los elementos.
¿Cómo añado una clave a un diccionario de Python?
Asígnale un valor: my_dict['new_key'] = 'new value'. Si la clave ya existe, el valor se sobrescribe. Si no, se añade. No hay distinción entre "insertar" y "actualizar" — es la misma sintaxis.
¿Cuál es la diferencia entre dict[key] y dict.get(key)?
dict[key] lanza KeyError si la clave no está. dict.get(key) devuelve None (o un valor por defecto que proporciones) en su lugar. Usa .get() cuando las claves ausentes sean esperables y normales; usa [key] cuando una clave ausente sea un bug.