Diccionarios en Python
Los diccionarios almacenan pares clave: valor. Son perfectos para representar objetos del mundo real y estructurar datos con nombres descriptivos.
¿Qué es un Diccionario?
Un diccionario guarda datos en pares clave: valor entre llaves {}.
A diferencia de las listas, accedés a los valores por su nombre, no por posición.
persona = {
"nombre": "Ana",
"edad": 28,
"ciudad": "Córdoba",
"activo": True
}
# Acceder por clave
print(persona["nombre"]) # Ana
print(persona["edad"]) # 28
# Otra forma segura: get() (no lanza error si la clave no existe)
print(persona.get("email", "sin email")) # sin email
Cada clave debe ser única en el diccionario. Si asignás un valor a una clave que ya existe, la sobreescribís. Las claves suelen ser strings, pero también pueden ser números o tuplas.
Agregar, modificar y eliminar
producto = {"nombre": "Laptop", "precio": 1200}
# Agregar una clave nueva
producto["stock"] = 15
producto["marca"] = "TechCo"
# Modificar un valor existente
producto["precio"] = 999
# Eliminar una clave
del producto["marca"]
# pop() — elimina y devuelve el valor
stock = producto.pop("stock")
print(f"Stock eliminado: {stock}")
print(producto) # {'nombre': 'Laptop', 'precio': 999}
update() — fusionar diccionarios
base = {"nombre": "Ana", "edad": 28}
extra = {"ciudad": "Córdoba", "edad": 29} # edad se sobreescribe
base.update(extra)
print(base) # {'nombre': 'Ana', 'edad': 29, 'ciudad': 'Córdoba'}
Probá el Ejemplo 2: Modificar diccionarios
keys(), values() e items()
Tres métodos esenciales para recorrer un diccionario:
persona = {"nombre": "Carlos", "edad": 35, "ciudad": "Rosario"}
# Solo las claves
for clave in persona.keys():
print(clave) # nombre, edad, ciudad
# Solo los valores
for valor in persona.values():
print(valor) # Carlos, 35, Rosario
# Claves y valores juntos (lo más usado)
for clave, valor in persona.items():
print(f"{clave}: {valor}")
En la mayoría de los casos vas a querer tanto la clave como el valor. for clave, valor in dic.items() es el patrón estándar para recorrer un diccionario completo.
Verificar existencia de una clave
if "email" in persona:
print(persona["email"])
else:
print("No tiene email registrado")
# Forma compacta con get()
email = persona.get("email", "no registrado")
print(f"Email: {email}")
Probá el Ejemplo 3: Recorrer diccionarios
Diccionarios anidados
Un diccionario puede contener otros diccionarios como valores — ideal para datos jerárquicos.
empresa = {
"nombre": "TechCorp",
"empleados": {
"ana": {"cargo": "Dev", "salario": 3000},
"carlos": {"cargo": "QA", "salario": 2500},
"beatriz": {"cargo": "UX", "salario": 2800},
}
}
# Acceder a datos anidados
print(empresa["nombre"]) # TechCorp
print(empresa["empleados"]["ana"]["cargo"]) # Dev
print(empresa["empleados"]["carlos"]["salario"]) # 2500
# Recorrer empleados
for nombre, datos in empresa["empleados"].items():
print(f"{nombre.capitalize()}: {datos['cargo']} — ${datos['salario']}")
Métodos útiles
get(clave, default)
d.get("x", 0)
Devuelve el valor o el default si no existe la clave
keys()
list(d.keys())
Lista de todas las claves
values()
list(d.values())
Lista de todos los valores
items()
for k, v in d.items()
Pares clave-valor para iterar
update(otro_dict)
d.update({"x": 1})
Fusiona otro diccionario
pop(clave)
d.pop("x")
Elimina y devuelve el valor
setdefault(clave, val)
d.setdefault("x", 0)
Asigna el valor solo si la clave no existe
copy()
d2 = d.copy()
Copia superficial del diccionario
Ejemplo Completo
Sistema de inventario usando diccionarios:
inventario = {
"laptop": {"precio": 1200, "stock": 5, "categoria": "electrónica"},
"mouse": {"precio": 25, "stock": 30, "categoria": "electrónica"},
"teclado": {"precio": 75, "stock": 20, "categoria": "electrónica"},
"silla": {"precio": 350, "stock": 8, "categoria": "muebles"},
"escritorio": {"precio": 500, "stock": 3, "categoria": "muebles"},
}
def valor_total(inv):
return sum(datos["precio"] * datos["stock"] for datos in inv.values())
def productos_por_categoria(inv, categoria):
return {k: v for k, v in inv.items() if v["categoria"] == categoria}
def stock_bajo(inv, minimo=5):
return {k: v for k, v in inv.items() if v["stock"] <= minimo}
# Mostrar inventario
print(f"{'Producto':<12} {'Precio':>8} {'Stock':>6} {'Subtotal':>10}")
print("-" * 40)
for nombre, datos in inventario.items():
subtotal = datos["precio"] * datos["stock"]
print(f"{nombre:<12} ${datos['precio']:>7} {datos['stock']:>6} ${subtotal:>9}")
print(f"\nValor total del inventario: ${valor_total(inventario):,.2f}")
print("\n--- Stock bajo (≤ 5 unidades) ---")
for nombre, datos in stock_bajo(inventario).items():
print(f" ⚠️ {nombre}: {datos['stock']} unidades")
Probá el Ejemplo 4: Sistema de inventario
Buenas Prácticas
- Usá get() en vez de [] cuando la clave puede no existir — evita KeyError
- Claves descriptivas —
"precio_unitario"es mejor que"p" - copy() para copiar —
d2 = d1crea una referencia, no una copia - items() para iterar — es más claro que acceder por clave en un loop
- Diccionarios vs clases — para estructuras simples usá dict; si el objeto tiene comportamiento, usá clases