Introducción
Contenido de la lección.
Objetivos de aprendizaje
- Objetivo 1
- Objetivo 2
- Objetivo 3
Objetivos de Aprendizaje
Al finalizar este tema, serás capaz de:
- Comprender la estructura y ventajas de las listas de diccionarios
- Implementar operaciones CRUD (crear, leer, actualizar, eliminar) en listas de diccionarios
- Aplicar técnicas de búsqueda, filtrado y ordenamiento en estructuras complejas
- Desarrollar soluciones para casos de uso profesionales reales
📚 Conceptos Fundamentales
Una lista de diccionarios es una estructura de datos que combina la flexibilidad de las listas (orden y acceso por índice) con la versatilidad de los diccionarios (acceso por clave). Cada elemento de la lista es un diccionario que puede contener diferentes tipos de datos. Esta combinación es especialmente útil cuando necesitamos representar múltiples registros con la misma estructura, como estudiantes en una universidad, productos en un inventario, o empleados en una empresa. La ventaja principal es que podemos acceder a la información tanto por posición (usando índices) como por contenido (usando las claves de los diccionarios).
# Lista de diccionarios representando estudiantes
estudiantes = [
{'nombre': 'Ana', 'edad': 20, 'carrera': 'Ingeniería'},
{'nombre': 'Luis', 'edad': 22, 'carrera': 'Medicina'},
{'nombre': 'María', 'edad': 21, 'carrera': 'Derecho'}
]
print('Lista completa:')
for estudiante in estudiantes:
print(estudiante)
Lista completa: {'nombre': 'Ana', 'edad': 20, 'carrera': 'Ingeniería'} {'nombre': 'Luis', 'edad': 22, 'carrera': 'Medicina'} {'nombre': 'María', 'edad': 21, 'carrera': 'Derecho'}
# Acceso por índice y clave
print('Primer estudiante:', estudiantes[0])
print('Nombre del segundo estudiante:', estudiantes[1]['nombre'])
print('Carrera de María:', estudiantes[2]['carrera'])
Primer estudiante: {'nombre': 'Ana', 'edad': 20, 'carrera': 'Ingeniería'} Nombre del segundo estudiante: Luis Carrera de María: Derecho
🎯 Operaciones CRUD Básicas
Las operaciones CRUD (Create, Read, Update, Delete) son fundamentales para el manejo de datos. En listas de diccionarios, estas operaciones nos permiten gestionar registros de manera dinámica. Create implica añadir nuevos diccionarios a la lista. Read significa acceder y mostrar información existente. Update involucra modificar valores en diccionarios específicos. Delete requiere eliminar diccionarios completos o claves específicas. Estas operaciones son la base para construir sistemas de gestión de información robustos y son ampliamente utilizadas en aplicaciones profesionales como sistemas de inventario, gestión de usuarios, y bases de datos simples.
# Lista inicial de productos
productos = [
{'id': 1, 'nombre': 'Laptop', 'precio': 1200, 'stock': 5},
{'id': 2, 'nombre': 'Mouse', 'precio': 25, 'stock': 50}
]
# CREATE: Agregar nuevo producto
nuevo_producto = {'id': 3, 'nombre': 'Teclado', 'precio': 80, 'stock': 30}
productos.append(nuevo_producto)
# READ: Mostrar todos los productos
print('Inventario actual:')
for producto in productos:
print(f"ID: {producto['id']}, Nombre: {producto['nombre']}, Precio: ${producto['precio']}")
Inventario actual: ID: 1, Nombre: Laptop, Precio: $1200 ID: 2, Nombre: Mouse, Precio: $25 ID: 3, Nombre: Teclado, Precio: $80
# UPDATE: Modificar precio del mouse
for producto in productos:
if producto['id'] == 2:
producto['precio'] = 30
print(f"Precio actualizado para {producto['nombre']}: ${producto['precio']}")
# DELETE: Eliminar producto por ID
productos = [p for p in productos if p['id'] != 1]
print('\nProductos después de eliminar laptop:')
for producto in productos:
print(f"ID: {producto['id']}, Nombre: {producto['nombre']}")
Precio actualizado para Mouse: $30 Productos después de eliminar laptop: ID: 2, Nombre: Mouse ID: 3, Nombre: Teclado
💡 Búsqueda y Filtrado Avanzado
La búsqueda y filtrado en listas de diccionarios es una habilidad crucial para el manejo eficiente de datos. Podemos buscar registros específicos basados en criterios únicos o múltiples, filtrar subconjuntos de datos que cumplan ciertas condiciones, y ordenar la información según diferentes parámetros. Estas operaciones son esenciales en aplicaciones reales donde necesitamos encontrar usuarios específicos, productos dentro de un rango de precios, o empleados de un departamento particular. Python ofrece múltiples herramientas para estas tareas, desde bucles tradicionales hasta comprensiones de listas y funciones built-in como filter() y sorted().
# Base de datos de empleados
empleados = [
{'nombre': 'Juan', 'departamento': 'IT', 'salario': 3500, 'experiencia': 5},
{'nombre': 'Ana', 'departamento': 'Marketing', 'salario': 3000, 'experiencia': 3},
{'nombre': 'Pedro', 'departamento': 'IT', 'salario': 4000, 'experiencia': 7},
{'nombre': 'Laura', 'departamento': 'Ventas', 'salario': 2800, 'experiencia': 2}
]
# Buscar empleado específico
nombre_buscado = 'Ana'
empleado_encontrado = None
for emp in empleados:
if emp['nombre'] == nombre_buscado:
empleado_encontrado = emp
break
if empleado_encontrado:
print(f"Empleado encontrado: {empleado_encontrado['nombre']}, Dep: {empleado_encontrado['departamento']}")
Empleado encontrado: Ana, Dep: Marketing
# Filtrar empleados de IT con salario mayor a 3000
it_seniors = [emp for emp in empleados
if emp['departamento'] == 'IT' and emp['salario'] > 3000]
print('Empleados senior de IT:')
for emp in it_seniors:
print(f"{emp['nombre']}: ${emp['salario']}")
# Ordenar por experiencia (descendente)
empleados_ordenados = sorted(empleados, key=lambda x: x['experiencia'], reverse=True)
print('\nEmpleados por experiencia:')
for emp in empleados_ordenados:
print(f"{emp['nombre']}: {emp['experiencia']} años")
Empleados senior de IT: Pedro: $4000 Empleados por experiencia: Pedro: 7 años Juan: 5 años Ana: 3 años Laura: 2 años
🔧 Casos de Uso Profesionales
En el desarrollo profesional, las listas de diccionarios son fundamentales para múltiples aplicaciones: gestión de inventarios en e-commerce, sistemas de registro de estudiantes, APIs que manejan datos JSON, logs de sistema, configuraciones de aplicaciones, y bases de datos temporales. Un caso típico es el procesamiento de datos provenientes de APIs REST, donde cada respuesta contiene múltiples registros con estructura similar. Otro uso común es la implementación de sistemas de caché en memoria, donde necesitamos acceso rápido tanto por posición como por contenido. La flexibilidad de esta estructura permite adaptarse a cambios en los requerimientos sin reestructurar completamente el código.
# Sistema de biblioteca con operaciones completas
biblioteca = [
{'isbn': '978-01', 'titulo': 'Python Programming', 'autor': 'Smith', 'disponible': True, 'categoria': 'Tecnología'},
{'isbn': '978-02', 'titulo': 'Data Science', 'autor': 'Johnson', 'disponible': False, 'categoria': 'Tecnología'},
{'isbn': '978-03', 'titulo': 'Historia Mundial', 'autor': 'Brown', 'disponible': True, 'categoria': 'Historia'}
]
def prestar_libro(isbn):
for libro in biblioteca:
if libro['isbn'] == isbn and libro['disponible']:
libro['disponible'] = False
return f"Libro '{libro['titulo']}' prestado exitosamente"
return 'Libro no disponible o no encontrado'
def libros_disponibles_por_categoria(categoria):
return [libro for libro in biblioteca
if libro['categoria'] == categoria and libro['disponible']]
# Pruebas del sistema
print(prestar_libro('978-01'))
print('\nLibros de Tecnología disponibles:')
for libro in libros_disponibles_por_categoria('Tecnología'):
print(f"- {libro['titulo']} por {libro['autor']}")
Libro 'Python Programming' prestado exitosamente Libros de Tecnología disponibles: - Data Science por Johnson
# Sistema de análisis de ventas
ventas = [
{'fecha': '2024-01-01', 'producto': 'Laptop', 'cantidad': 2, 'precio_unitario': 1200, 'vendedor': 'Ana'},
{'fecha': '2024-01-01', 'producto': 'Mouse', 'cantidad': 5, 'precio_unitario': 25, 'vendedor': 'Luis'},
{'fecha': '2024-01-02', 'producto': 'Laptop', 'cantidad': 1, 'precio_unitario': 1200, 'vendedor': 'Ana'},
{'fecha': '2024-01-02', 'producto': 'Teclado', 'cantidad': 3, 'precio_unitario': 80, 'vendedor': 'María'}
]
# Calcular total de ventas
total_ventas = sum(venta['cantidad'] * venta['precio_unitario'] for venta in ventas)
print(f'Total de ventas: ${total_ventas}')
# Ventas por vendedor
ventas_por_vendedor = {}
for venta in ventas:
vendedor = venta['vendedor']
total = venta['cantidad'] * venta['precio_unitario']
ventas_por_vendedor[vendedor] = ventas_por_vendedor.get(vendedor, 0) + total
print('\nVentas por vendedor:')
for vendedor, total in ventas_por_vendedor.items():
print(f'{vendedor}: ${total}')
Total de ventas: $3765 Ventas por vendedor: Ana: $3600 Luis: $125 María: $240
Ejercicios Prácticos
Sistema de Gestión de Estudiantes
INTERMEDIODescripción:
Crea un sistema que maneje una lista de estudiantes con nombre, edad, carrera y calificaciones. Implementa funciones para: agregar estudiante, buscar por nombre, calcular promedio de calificaciones, listar estudiantes por carrera, y actualizar información.
Inventario de Tienda Online
AVANZADODescripción:
Desarrolla un sistema de inventario que permita: registrar productos con ID, nombre, precio, stock y categoría; buscar productos por categoría; actualizar stock después de ventas; generar reporte de productos con stock bajo; calcular valor total del inventario.
Registro de Empleados
INTERMEDIODescripción:
Crea una base de datos simple de empleados con nombre, ID, departamento, salario y fecha de contratación. Incluye funcionalidades para: contratar empleado, dar de baja, buscar por departamento, calcular nómina total por departamento, listar empleados contratados en un rango de fechas.
Sistema de Calificaciones Universitarias
AVANZADODescripción:
Implementa un sistema que maneje cursos con información de estudiantes inscritos y sus calificaciones. Cada curso debe tener: código, nombre, profesor, y lista de estudiantes con sus calificaciones. Incluye funciones para calcular promedios, identificar estudiantes en riesgo académico, y generar estadísticas del curso.
Resumen y Próximos Pasos
Las listas de diccionarios representan una herramienta fundamental en Python para el manejo de datos estructurados complejos. Hemos explorado desde conceptos básicos hasta implementaciones profesionales, cubriendo operaciones CRUD, técnicas de búsqueda y filtrado, y casos de uso reales. Esta estructura de datos es esencial para el desarrollo de aplicaciones modernas y constituye la base para comprender conceptos más avanzados como bases de datos, APIs y procesamiento de grandes volúmenes de datos. En el siguiente tema, profundizaremos en estructuras de datos aún más complejas y técnicas de optimización para el manejo eficiente de información a gran escala.