Estructuras combinadas
Puedes combinar todas estas estructuras de datos en Python de diversas maneras para crear estructuras de datos anidadas más complejas. Esto te permite representar y organizar datos de manera flexible y poderosa. Aquí te mostraré ejemplos de diferentes combinaciones anidadas:
Ejemplo 1: Lista de Diccionarios
Puedes tener una lista de diccionarios donde cada diccionario representa un elemento de la lista, y los diccionarios pueden tener diferentes claves y valores:
personas = [
{"nombre": "Juan", "edad": 30},
{"nombre": "María", "edad": 25},
{"nombre": "Pedro", "edad": 35}
]
En este ejemplo, personas
es una lista de diccionarios que almacena información sobre personas.
Ejemplo 2: Diccionario de Listas
Puedes tener un diccionario donde los valores son listas. Por ejemplo, un diccionario de asignaturas con listas de estudiantes que las han cursado:
asignaturas = {
"Matemáticas": ["Juan", "María", "Pedro"],
"Historia": ["Ana", "Luis"],
"Inglés": ["Carlos"]
}
En este caso, asignaturas
es un diccionario donde las claves son nombres de asignaturas y los valores son listas de estudiantes.
Ejemplo 3: Tuplas de Listas de Conjuntos
Puedes anidar estructuras de datos en tuplas. Por ejemplo, una tupla que contiene listas y conjuntos:
datos = ([1, 2, 3], ["rojo", "verde"], {1, 2, 3})
En este caso, datos
es una tupla que contiene una lista, una lista de cadenas y un conjunto.
Ejemplo 4: Lista de Diccionarios con Conjuntos
Puedes combinar múltiples estructuras anidadas. Aquí hay una lista de diccionarios, donde cada diccionario contiene un conjunto:
personas = [
{"nombre": "Juan", "amigos": {"María", "Pedro"}},
{"nombre": "María", "amigos": {"Juan", "Luis"}},
{"nombre": "Pedro", "amigos": {"Juan", "Ana"}}
]
En este ejemplo, personas
es una lista de diccionarios, y cada diccionario contiene un conjunto llamado “amigos” que representa las amistades de cada persona.
Aquí tienes algunos ejemplos más complejos que involucran listas y diccionarios anidados en Python.
Ejemplo 1: Gestión de un sistema de inventario
Supongamos que estás gestionando un inventario de productos, y cada producto tiene diferentes variantes (como color y tamaño). Cada variante tiene una cantidad disponible. Queremos una función para actualizar el inventario cuando se vende una cantidad de una variante específica de un producto.
inventario = {
"camiseta": {
"variantes": [
{"color": "rojo", "tamaño": "M", "cantidad": 10},
{"color": "azul", "tamaño": "L", "cantidad": 5}
]
},
"pantalones": {
"variantes": [
{"color": "negro", "tamaño": "32", "cantidad": 15},
{"color": "azul", "tamaño": "34", "cantidad": 7}
]
}
}
def vender_producto(inventario, producto, color, tamaño, cantidad_vendida):
if producto in inventario:
for variante in inventario[producto]["variantes"]:
if variante["color"] == color and variante["tamaño"] == tamaño:
if variante["cantidad"] >= cantidad_vendida:
variante["cantidad"] -= cantidad_vendida
return True
else:
return False
return False
# Ejemplo de uso
producto = "camiseta"
color = "rojo"
tamaño = "M"
cantidad_vendida = 3
venta_exitosa = vender_producto(inventario, producto, color, tamaño, cantidad_vendida)
print("Venta exitosa:", venta_exitosa)
print("Inventario actualizado:", inventario)
Ejemplo 2: Procesar resultados de exámenes
Supongamos que tienes una lista de estudiantes, cada uno con sus calificaciones en diferentes materias. Queremos calcular el promedio general de cada estudiante y el promedio por materia para todos los estudiantes.
estudiantes = [
{"nombre": "Juan", "calificaciones": {"Matemáticas": 85, "Ciencias": 90, "Historia": 80}},
{"nombre": "Ana", "calificaciones": {"Matemáticas": 78, "Ciencias": 88, "Historia": 92}},
{"nombre": "Luis", "calificaciones": {"Matemáticas": 82, "Ciencias": 84, "Historia": 85}}
]
def calcular_promedios(estudiantes):
promedios_estudiantes = {}
suma_calificaciones_materia = {}
cantidad_calificaciones_materia = {}
for estudiante in estudiantes:
nombre = estudiante["nombre"]
calificaciones = estudiante["calificaciones"]
total_calificaciones = 0
num_materias = len(calificaciones)
for materia, calificacion in calificaciones.items():
total_calificaciones += calificacion
if materia not in suma_calificaciones_materia:
suma_calificaciones_materia[materia] = 0
cantidad_calificaciones_materia[materia] = 0
suma_calificaciones_materia[materia] += calificacion
cantidad_calificaciones_materia[materia] += 1
promedios_estudiantes[nombre] = total_calificaciones / num_materias
promedios_materia = {materia: suma / cantidad_calificaciones_materia[materia]
for materia, suma in suma_calificaciones_materia.items()}
return promedios_estudiantes, promedios_materia
# Ejemplo de uso
promedios_estudiantes, promedios_materia = calcular_promedios(estudiantes)
print("Promedios de estudiantes:", promedios_estudiantes)
print("Promedios por materia:", promedios_materia)
Ejemplo 3: Registro de ventas de una tienda
Supongamos que tienes un registro de ventas de una tienda, donde cada venta incluye información sobre los productos vendidos, la cantidad y el total de la venta. Queremos obtener un informe de ventas totales por producto.
ventas = [
{"fecha": "2024-05-01", "productos": [{"nombre": "camiseta", "cantidad": 2, "total": 40.00}, {"nombre": "pantalones", "cantidad": 1, "total": 50.00}]},
{"fecha": "2024-05-02", "productos": [{"nombre": "camiseta", "cantidad": 1, "total": 20.00}, {"nombre": "zapatos", "cantidad": 2, "total": 100.00}]},
{"fecha": "2024-05-03", "productos": [{"nombre": "pantalones", "cantidad": 3, "total": 150.00}, {"nombre": "zapatos", "cantidad": 1, "total": 50.00}]}
]
def informe_ventas(ventas):
resumen_ventas = {}
for venta in ventas:
for producto in venta["productos"]:
nombre_producto = producto["nombre"]
cantidad = producto["cantidad"]
total = producto["total"]
if nombre_producto not in resumen_ventas:
resumen_ventas[nombre_producto] = {"cantidad": 0, "total": 0.0}
resumen_ventas[nombre_producto]["cantidad"] += cantidad
resumen_ventas[nombre_producto]["total"] += total
return resumen_ventas
# Ejemplo de uso
resumen = informe_ventas(ventas)
print("Resumen de ventas:", resumen)
¡Por supuesto! Aquí tienes ejemplos aún más complejos que involucran listas y diccionarios anidados en Python.
Ejemplo 4: Sistema de gestión de proyectos
Supongamos que estás gestionando un sistema de proyectos donde cada proyecto tiene múltiples tareas y cada tarea tiene asignada a varias personas. Queremos obtener un informe del tiempo total trabajado por cada persona en todos los proyectos.
proyectos = [
{
"nombre": "Proyecto A",
"tareas": [
{
"nombre": "Tarea 1",
"asignados": [
{"nombre": "Juan", "horas": 10},
{"nombre": "Ana", "horas": 5}
]
},
{
"nombre": "Tarea 2",
"asignados": [
{"nombre": "Pedro", "horas": 7},
{"nombre": "Ana", "horas": 3}
]
}
]
},
{
"nombre": "Proyecto B",
"tareas": [
{
"nombre": "Tarea 1",
"asignados": [
{"nombre": "Juan", "horas": 4},
{"nombre": "Marta", "horas": 6}
]
},
{
"nombre": "Tarea 2",
"asignados": [
{"nombre": "Pedro", "horas": 8},
{"nombre": "Marta", "horas": 2}
]
}
]
}
]
def calcular_tiempo_total(proyectos):
tiempo_total = {}
for proyecto in proyectos:
for tarea in proyecto["tareas"]:
for asignado in tarea["asignados"]:
nombre = asignado["nombre"]
horas = asignado["horas"]
if nombre not in tiempo_total:
tiempo_total[nombre] = 0
tiempo_total[nombre] += horas
return tiempo_total
# Ejemplo de uso
tiempo_total = calcular_tiempo_total(proyectos)
print("Tiempo total trabajado por cada persona:", tiempo_total)
Ejemplo 5: Sistema de gestión de cursos y estudiantes
Supongamos que tienes un sistema de gestión de cursos donde cada curso tiene varios estudiantes inscritos, y cada estudiante tiene un registro de asistencia. Queremos obtener el porcentaje de asistencia de cada estudiante en cada curso.
cursos = [
{
"nombre": "Matemáticas",
"estudiantes": [
{"nombre": "Juan", "asistencias": [1, 0, 1, 1, 1]},
{"nombre": "Ana", "asistencias": [1, 1, 1, 1, 0]},
{"nombre": "Pedro", "asistencias": [0, 1, 1, 0, 1]}
]
},
{
"nombre": "Ciencias",
"estudiantes": [
{"nombre": "Juan", "asistencias": [1, 1, 0, 1, 1]},
{"nombre": "Marta", "asistencias": [1, 1, 1, 1, 1]},
{"nombre": "Pedro", "asistencias": [1, 0, 1, 1, 0]}
]
}
]
def calcular_porcentaje_asistencia(cursos):
porcentaje_asistencia = {}
for curso in cursos:
nombre_curso = curso["nombre"]
if nombre_curso not in porcentaje_asistencia:
porcentaje_asistencia[nombre_curso] = {}
for estudiante in curso["estudiantes"]:
nombre_estudiante = estudiante["nombre"]
asistencias = estudiante["asistencias"]
porcentaje = sum(asistencias) / len(asistencias) * 100
porcentaje_asistencia[nombre_curso][nombre_estudiante] = porcentaje
return porcentaje_asistencia
# Ejemplo de uso
porcentaje_asistencia = calcular_porcentaje_asistencia(cursos)
print("Porcentaje de asistencia por curso y estudiante:", porcentaje_asistencia)
Ejemplo 6: Sistema de reservas de hotel
Supongamos que estás gestionando un sistema de reservas de un hotel donde cada reserva tiene información del huésped y las habitaciones reservadas. Queremos obtener un informe de ocupación de habitaciones y el total facturado por cada habitación.
reservas = [
{
"huésped": "Juan",
"habitaciones": [
{"número": 101, "precio": 100, "noches": 3},
{"número": 102, "precio": 120, "noches": 2}
]
},
{
"huésped": "Ana",
"habitaciones": [
{"número": 101, "precio": 100, "noches": 1},
{"número": 103, "precio": 150, "noches": 4}
]
},
{
"huésped": "Pedro",
"habitaciones": [
{"número": 102, "precio": 120, "noches": 3},
{"número": 104, "precio": 200, "noches": 2}
]
}
]
def informe_ocupacion_y_facturacion(reservas):
ocupacion_habitaciones = {}
facturacion_habitaciones = {}
for reserva in reservas:
for habitacion in reserva["habitaciones"]:
numero = habitacion["número"]
precio = habitacion["precio"]
noches = habitacion["noches"]
if numero not in ocupacion_habitaciones:
ocupacion_habitaciones[numero] = 0
facturacion_habitaciones[numero] = 0
ocupacion_habitaciones[numero] += noches
facturacion_habitaciones[numero] += precio * noches
return ocupacion_habitaciones, facturacion_habitaciones
# Ejemplo de uso
ocupacion, facturacion = informe_ocupacion_y_facturacion(reservas)
print("Ocupación de habitaciones:", ocupacion)
print("Facturación por habitación:", facturacion)
Ejemplo 7: Sistema de votación para un concurso
Supongamos que estás gestionando un sistema de votación para un concurso donde cada votante puede votar por múltiples participantes y dar diferentes puntos a cada uno. Queremos obtener el total de puntos recibidos por cada participante.
votaciones = [
{
"votante": "Juan",
"votos": [
{"participante": "Ana", "puntos": 5},
{"participante": "Pedro", "puntos": 3}
]
},
{
"votante": "Marta",
"votos": [
{"participante": "Ana", "puntos": 4},
{"participante": "Luis", "puntos": 2}
]
},
{
"votante": "Pedro",
"votos": [
{"participante": "Ana", "puntos": 3},
{"participante": "Luis", "puntos": 5}
]
}
]
def total_puntos(votaciones):
puntos_participantes = {}
for votacion in votaciones:
for voto in votacion["votos"]:
participante = voto["participante"]
puntos = voto["puntos"]
if participante not in puntos_participantes:
puntos_participantes[participante] = 0
puntos_participantes[participante] += puntos
return puntos_participantes
# Ejemplo de uso
puntos_totales = total_puntos(votaciones)
print("Total de puntos por participante:", puntos_totales)
Estos ejemplos muestran cómo manejar estructuras de datos más complejas en Python para resolver problemas de gestión de proyectos, sistemas de gestión de cursos, reservas de hotel y votaciones de concursos, utilizando listas y diccionarios anidados de manera eficiente.