Diccionarios: El Poder de los Datos Clave-Valor
Si las listas son como filas numeradas, los diccionarios son como fichas etiquetadas. Accedes a los datos por su clave (un nombre descriptivo) en lugar de su posicion. Son perfectos para representar objetos del mundo real.
Crear diccionariospersona = {
'nombre': 'Ana Garcia',
'edad': 28,
'ciudad': 'Buenos Aires',
'activo': True,
'habilidades': ['Python', 'JavaScript', 'SQL']
}
print(persona)
print(type(persona))
print(len(persona))
Acceder a valores
persona = {'nombre': 'Ana', 'edad': 28, 'ciudad': 'CABA'}
# Metodo 1: corchetes
print(persona['nombre'])
print(persona['edad'])
# Metodo 2: get() - seguro, sin error si la clave no existe
print(persona.get('ciudad'))
print(persona.get('telefono')) # None
print(persona.get('telefono', 'Sin telefono')) # valor por defecto
Modificar diccionarios
producto = {'nombre': 'Laptop', 'precio': 800, 'stock': 10}
producto['precio'] = 750
producto['marca'] = 'TechCo'
producto.update({'precio': 699, 'stock': 15, 'garantia': '2 anios'})
print(producto)
Eliminar elementos
config = {'host': 'localhost', 'puerto': 5432, 'debug': True}
del config['debug']
puerto = config.pop('puerto')
print(f'Puerto eliminado: {puerto}')
config.clear()
print(config) # {}
Iterar sobre diccionarios
estudiante = {
'nombre': 'Carlos',
'matematicas': 90,
'ingles': 85,
'programacion': 95
}
for clave in estudiante:
print(clave)
for valor in estudiante.values():
print(valor)
for clave, valor in estudiante.items():
print(f'{clave}: {valor}')
Verificar claves
usuario = {'email': '[email protected]', 'plan': 'premium'}
if 'email' in usuario:
print(f"Email: {usuario['email']}")
if 'telefono' not in usuario:
print('No tiene telefono registrado')
Diccionarios anidados
empresa = {
'nombre': 'TechStartup SA',
'fundacion': 2020,
'empleados': {
'total': 50,
'departamentos': {
'ingenieria': 25,
'marketing': 15,
'ventas': 10
}
},
'productos': ['App Mobile', 'Dashboard Web', 'API REST']
}
print(empresa['nombre'])
print(empresa['empleados']['total'])
print(empresa['empleados']['departamentos']['ingenieria'])
print(empresa['productos'][0])
Metodos avanzados
# setdefault
config = {'host': 'localhost'}
config.setdefault('puerto', 8080)
config.setdefault('host', 'otro') # No cambia, ya existe
print(config)
# Merge (Python 3.9+)
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
combinado = dict1 | dict2
print(combinado)
# Version anterior
combinado_v2 = {**dict1, **dict2}
print(combinado_v2)
Caso real: Sistema de usuarios
usuarios_db = {}
def registrar_usuario(email, nombre, plan='gratis'):
if email in usuarios_db:
return {'exito': False, 'mensaje': 'El email ya esta registrado'}
usuarios_db[email] = {
'nombre': nombre,
'email': email,
'plan': plan,
'activo': True
}
return {'exito': True, 'mensaje': f'Usuario {nombre} registrado'}
def actualizar_plan(email, nuevo_plan):
if email not in usuarios_db:
return {'exito': False, 'mensaje': 'Usuario no encontrado'}
plan_anterior = usuarios_db[email]['plan']
usuarios_db[email]['plan'] = nuevo_plan
return {'exito': True, 'mensaje': f'Plan: {plan_anterior} -> {nuevo_plan}'}
print(registrar_usuario('[email protected]', 'Ana Garcia', 'premium'))
print(registrar_usuario('[email protected]', 'Carlos Mendez'))
print(registrar_usuario('[email protected]', 'Otro Ana')) # Error
print(actualizar_plan('[email protected]', 'pro'))
Comprension de diccionarios
cuadrados = {n: n**2 for n in range(1, 6)}
print(cuadrados)
precios = {'Laptop': 800, 'Mouse': 25, 'Teclado': 60}
descuentos = {prod: precio * 0.9 for prod, precio in precios.items()}
print(descuentos)
productos_caros = {k: v for k, v in precios.items() if v > 50}
print(productos_caros)
💡 Concepto Clave
Revisemos los puntos más importantes de esta lección antes de continuar.
Resumen
- Los diccionarios guardan pares clave-valor
- Las claves deben ser inmutables (strings, numeros, tuplas)
- get() es mas seguro que [] para acceder a valores
- items(), keys(), values() para iterar
- Perfectos para representar objetos y configuraciones
En la proxima leccion aprenderemos sobre sets y operaciones de conjuntos.
🧠Pon a prueba tu conocimiento
¿Cuál es el aspecto más importante que aprendiste en esta lección?
- Comprendo el concepto principal y puedo explicarlo con mis palabras
- Entiendo cómo aplicarlo en mi situación especÃfica
- Necesito repasar algunas partes antes de continuar
- Quiero ver más ejemplos prácticos del tema
✅ ¡Excelente! Continúa con la siguiente lección para profundizar más.