Lección Python

Contenido de la lección

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).

Creación básica de una lista de diccionarios Copiar
# 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'}
Explicación: Creamos una lista donde cada elemento es un diccionario con la misma estructura de claves pero diferentes valores
Acceso a elementos específicos Copiar
# 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
Explicación: Combinamos acceso por índice [0] para seleccionar el diccionario y acceso por clave ['nombre'] para obtener valores específicos

🎯 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.

Operaciones Create y Read Copiar
# 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
Explicación: Utilizamos append() para agregar nuevos diccionarios y un bucle for para leer y mostrar la información formateada
Operaciones Update y Delete Copiar
# 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
Explicación: Usamos un bucle for para encontrar y actualizar elementos, y list comprehension para filtrar y eliminar elementos específicos

💡 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().

Búsqueda de elementos específicos Copiar
# 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
Explicación: Utilizamos un bucle for con break para encontrar el primer elemento que coincida con nuestro criterio de búsqueda
Filtrado múltiple y ordenamiento Copiar
# 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
Explicación: Combinamos list comprehension para filtrado múltiple y sorted() con lambda para ordenamiento personalizado

🔧 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 gestión de biblioteca Copiar
# 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
Explicación: Implementamos funciones que encapsulan lógica de negocio, demostrando cómo las listas de diccionarios facilitan operaciones complejas
Análisis de datos de ventas Copiar
# 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
Explicación: Demostramos cálculos agregados y agrupación de datos, técnicas esenciales en análisis de datos empresariales

Ejercicios Prácticos

Sistema de Gestión de Estudiantes
INTERMEDIO

Descripció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.

Pista: Usa funciones separadas para cada operación y considera usar get() para acceso seguro a claves que podrían no existir
Inventario de Tienda Online
AVANZADO

Descripció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.

Pista: Implementa validaciones para evitar stock negativo y considera usar comprehensions para filtros eficientes
Registro de Empleados
INTERMEDIO

Descripció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.

Pista: Para las fechas, puedes usar strings en formato 'YYYY-MM-DD' y comparación de strings. Considera crear funciones auxiliares para validaciones
Sistema de Calificaciones Universitarias
AVANZADO

Descripció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.

Pista: Esta es una estructura anidada: lista de cursos, donde cada curso contiene lista de estudiantes. Usa bucles anidados con cuidado y considera crear funciones específicas para cada tipo de cálculo

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.

🏷️ Etiquetas:
python estructuras-datos listas diccionarios programación ingeniería