Los diccionarios en Python almacenan información como pares de clave y valor. Son una de las estructuras más útiles del lenguaje porque permiten acceder a un dato mediante un nombre significativo, en lugar de depender solamente de una posición numérica.
Por ejemplo, una lista puede guardar ["Maya", 29, "[email protected]"], pero es necesario recordar qué significa cada posición. Un diccionario expresa la misma información de forma más clara:
person = {
"name": "Maya",
"age": 29,
"email": "[email protected]",
}
print(person["email"])Esta guía explica cómo crear diccionarios, consultar valores, añadir y eliminar elementos, recorrer pares, trabajar con estructuras anidadas, usar comprensiones y evitar errores frecuentes. Para comparar esta estructura con otras colecciones, consulta la guía sobre listas, tuplas, sets y diccionarios en Python.
Qué es un diccionario
Un diccionario es una estructura mutable que relaciona claves únicas con valores. Las claves deben ser objetos hashables, como cadenas, números o tuplas inmutables. Los valores pueden ser prácticamente cualquier objeto de Python: texto, números, listas, funciones u otros diccionarios.
Los diccionarios modernos conservan el orden de inserción, aunque su objetivo principal sigue siendo localizar información mediante una clave. La guía oficial de diccionarios de Python presenta las operaciones fundamentales de esta estructura.
Crear diccionarios
La forma más habitual utiliza llaves, dos puntos y comas:
empty = {}
student = {
"name": "Noah",
"grades": [8.5, 9.0, 7.8],
"active": True,
}También puedes utilizar dict() cuando las claves son nombres válidos:
settings = dict(
theme="dark",
language="es",
notifications=True,
)Una tupla puede ser clave si todos sus elementos son inmutables. Una lista no puede serlo porque su contenido puede cambiar. La guía de tuplas en Python explica por qué la inmutabilidad permite utilizar ciertos objetos como claves.
Acceder a valores con seguridad
Los corchetes devuelven el valor asociado a una clave:
user = {"name": "Ava", "role": "editor"}
print(user["role"])Cuando la clave no existe, Python genera KeyError. Si la ausencia es normal, utiliza get():
print(user.get("email"))
print(user.get("email", "Correo no disponible"))Usa corchetes cuando la clave sea obligatoria y un dato ausente indique un problema. Usa get() cuando el campo sea opcional. Para responder a errores esperados, revisa la guía de try y except en Python.
Añadir y modificar elementos
La asignación añade una clave nueva o sustituye el valor existente:
profile = {"name": "Leo", "city": "Madrid"}
profile["age"] = 34
profile["city"] = "Valencia"Con update() puedes aplicar varios cambios:
profile.update({
"job": "Developer",
"remote": True,
})El operador | crea una combinación nueva en versiones modernas de Python:
defaults = {"theme": "light", "page_size": 20}
custom = {"theme": "dark"}
final = defaults | customCuando una clave aparece en ambos diccionarios, prevalece el valor del diccionario situado a la derecha.
Eliminar elementos
del elimina una clave que debe existir:
cart = {"book": 2, "pen": 5, "notebook": 1}
del cart["pen"]pop() elimina la clave y devuelve su valor. Un valor predeterminado evita un error si la clave está ausente:
quantity = cart.pop("book", 0)
print(quantity)popitem() elimina el último par insertado, mientras que clear() vacía todo el diccionario.
keys(), values() e items()
Los métodos de vista más utilizados son:
keys(): devuelve las claves;values(): devuelve los valores;items(): devuelve pares de clave y valor.
prices = {"coffee": 3.50, "tea": 2.80, "juice": 4.10}
print(list(prices.keys()))
print(list(prices.values()))
print(list(prices.items()))Estas vistas reflejan los cambios posteriores realizados en el diccionario.
Recorrer un diccionario
Un bucle normal recorre las claves:
inventory = {"laptop": 8, "mouse": 24, "monitor": 11}
for product in inventory:
print(product)Cuando necesitas la clave y el valor, utiliza items():
for product, quantity in inventory.items():
print(f"{product}: {quantity}")La guía de bucles for en Python explica cómo recorrer colecciones, usar enumerate() y controlar iteraciones.
Comprobar claves y valores
El operador in busca claves:
account = {"username": "sam", "verified": False}
if "verified" in account:
print("El campo existe")Para buscar entre los valores, utiliza value in account.values(). Cuando las comprobaciones de pertenencia sean muy frecuentes y solo importe la existencia, un set puede ser una mejor opción. La guía de sets en Python explica sus ventajas.
Diccionarios anidados
Un diccionario puede contener otros diccionarios. Esto es habitual en JSON, respuestas de APIs y configuraciones:
company = {
"engineering": {
"manager": "Priya",
"employees": 18,
},
"design": {
"manager": "Chris",
"employees": 7,
},
}
print(company["engineering"]["manager"])Un nivel pequeño de anidación es manejable. Cuando la estructura se vuelve profunda, conviene separar datos en variables, funciones o clases.
Comprensiones de diccionarios
Una comprensión crea un diccionario a partir de un iterable:
squares = {
number: number ** 2
for number in range(1, 6)
}También puedes filtrar:
even_squares = {
number: number ** 2
for number in range(1, 11)
if number % 2 == 0
}Utiliza una comprensión cuando la transformación sea corta. Para varias validaciones o efectos secundarios, un bucle normal resulta más claro.
Ejemplo práctico: catálogo de productos
products = {
"KB100": {"name": "Keyboard", "price": 59.90, "stock": 12},
"MS200": {"name": "Mouse", "price": 24.90, "stock": 30},
}
def add_product(code, name, price, stock):
if code in products:
raise ValueError("El código ya existe")
products[code] = {
"name": name,
"price": price,
"stock": stock,
}
def inventory_value():
return sum(
item["price"] * item["stock"]
for item in products.values()
)
add_product("HD300", "External drive", 79.90, 6)
print(f"Valor del inventario: ${inventory_value():.2f}")Este ejemplo combina diccionarios, validación, funciones y expresiones generadoras. La guía de funciones en Python ayuda a organizar responsabilidades reutilizables.
Copias superficiales y profundas
copy() crea un diccionario exterior nuevo, pero los objetos mutables anidados siguen compartidos:
original = {"tags": ["python", "data"]}
copy_data = original.copy()
copy_data["tags"].append("web")
print(original)Cuando necesitas independencia completa, utiliza copy.deepcopy() después de comprender el coste y la estructura de los objetos.
Errores frecuentes
- Acceder directamente a una clave opcional.
- Intentar utilizar una lista como clave.
- Modificar el tamaño del diccionario durante la iteración.
- Confundir una copia superficial con una copia independiente.
- Crear niveles de anidación difíciles de mantener.
- Usar un diccionario cuando solo se necesita una secuencia ordenada.
Cuándo usar un diccionario
Elige un diccionario cuando los datos tengan etiquetas significativas, necesites localizar valores rápidamente o una entidad deba asociarse con otra. Son habituales en perfiles de usuario, catálogos, configuraciones, contadores, cachés, respuestas de APIs e índices.
La referencia oficial del tipo dict documenta todos los métodos y comportamientos disponibles.
Conclusión
Los diccionarios ofrecen acceso mediante claves, modificación directa, métodos de recorrido y una sintaxis flexible. Empieza dominando la creación, get(), items(), las comprobaciones con in y las estructuras anidadas. Después practica con un inventario, una agenda o un gestor de configuraciones.






