Volver al curso

Python Desde Cero

leccion
11 / 21
beginner
20 horas
Estructuras de Datos

Diccionarios: El Poder de los Datos Clave-Valor

Lectura
25 min~3 min lectura

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 diccionarios
persona = {
    '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.