Estructuras de Datos Avanzadas en Python: Collection y Enumeraciones

Clase 43 de 63Curso de Python

Contenido del curso

Fundamentos de Programación y Python

Programación Orientada a Objetos en Python

Conceptos avanzados de Python

Métodos y estructura de clases en Python

Resumen

Cuando trabajas con datos complejos en Python, las herramientas estándar a veces se quedan cortas. La librería collections y el módulo enum ofrecen estructuras especializadas que simplifican tareas comunes como contar elementos, gestionar colas o manejar constantes de forma segura. Conocer estas herramientas marca la diferencia entre código funcional y código profesional.

¿Cómo funciona DefaultDict para evitar errores en diccionarios?

DefaultDict es una variante del diccionario tradicional que asigna automáticamente un valor por defecto cuando se accede a una clave inexistente [01:08]. Esto elimina la necesidad de verificar manualmente si una clave existe antes de operar con ella.

En el ejemplo práctico se construye una función que cuenta productos vendidos a partir de una lista de órdenes:

  • Se importa DefaultDict desde collections.
  • Se crea un DefaultDict(int), lo que establece cero como valor por defecto para cualquier clave nueva.
  • Se itera sobre cada producto en las órdenes y se incrementa su contador en uno.
  • El resultado muestra la cantidad exacta de cada producto: dos laptops, un smartphone y una tablet [02:52].

La ventaja principal es que no es necesario inicializar cada clave de forma explícita. El diccionario se encarga de asignar el valor inicial automáticamente.

¿Cuándo usar Counter en lugar de DefaultDict?

Aunque el resultado puede parecer similar, Counter tiene un propósito distinto: realizar la sumatoria directa de apariciones dentro de una colección [03:28]. Es ideal cuando solo necesitas saber cuántas veces aparece cada elemento.

  • Se importa Counter desde collections.
  • Se pasa directamente la lista de productos a Counter() y este retorna un objeto con el conteo de cada elemento.
  • El resultado indica las ventas por producto de forma inmediata [04:38].

La diferencia clave es clara:

  • DefaultDict: se usa cuando necesitas establecer un valor por defecto y construir lógica personalizada sobre el diccionario.
  • Counter: se usa cuando la tarea es contar ocurrencias de manera directa sin lógica adicional.

¿Qué ventajas ofrece DeQueue como cola eficiente?

Una DeQueue (double-ended queue) permite agregar y eliminar elementos tanto al inicio como al final de la estructura [05:12]. Esto la convierte en una opción más versátil que una lista convencional para gestionar colas.

¿Cómo agregar elementos al inicio y al final?

Se trabaja con una cola de órdenes de envío:

  • append() añade un elemento al final de la cola.
  • appendLeft() añade un elemento al principio, colocándolo en la posición cero [06:18].

El resultado muestra todas las órdenes organizadas según su posición de inserción.

¿Cómo eliminar elementos de una DeQueue?

  • pop() elimina el último elemento de la cola [07:17].
  • popLeft() elimina el primer elemento [07:42].

Estos métodos permiten gestionar flujos de datos donde el orden de entrada y salida es fundamental, como sistemas de envío o procesamiento de tareas.

¿Para qué sirven las enumeraciones en Python?

Las enumeraciones (enum) permiten definir conjuntos de constantes con nombres significativos [08:08]. En lugar de usar números o cadenas sueltas que pueden generar errores, se crea una clase que hereda de Enum y contiene atributos fijos.

En el ejemplo se define una clase OrderStatus con tres estados:

  • PENDING = 1 para pedidos pendientes.
  • SHIPPED = 2 para pedidos enviados.
  • DELIVERED = 3 para pedidos entregados [08:45].

Una función externa recibe el estado como parámetro tipado con la clase OrderStatus y retorna un mensaje específico según el valor. Acceder a cada constante es directo: OrderStatus.SHIPPED devuelve el mensaje correspondiente [09:38].

Esto mejora la legibilidad del código y elimina la posibilidad de introducir valores incorrectos, ya que solo se pueden usar las constantes definidas en la clase.

Si quieres poner en práctica todo lo aprendido, el reto propuesto consiste en implementar un sistema de gestión de pedidos que combine DefaultDict para el registro de productos, enumeraciones para los estados de la orden y Counter para el conteo final. Comparte tu solución en los comentarios y compara tu enfoque con el de otros estudiantes.