Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Python intermedio para IA, Unidad 2 — Estructuras de datos avanzadas, 2.2 — Diccionarios avanzados ·

Default dict y counter

Default dict y counter: Herramientas esenciales para manipulación de datos

Introducción

En la programación de inteligencia artificial, la manipulación efectiva de datos puede hacer la diferencia entre un modelo que falla y uno que funciona bien. Entre las herramientas más útiles en este sentido están los defaultdict y el módulo Counter, ambos proporcionados por la biblioteca estándar collections. Estos objetos son ideales para contar frecuencias, agrupar datos o manejar casos de valores no encontrados sin necesidad de código adicional. Aprender a usarlos de manera efectiva puede ahorrar tiempo y prevenir errores comunes en tus scripts.

Explicación principal con ejemplos

defaultdict

Un defaultdict es una extensión del diccionario que proporciona un valor predeterminado para cualquier clave inexistente. Esto significa que no se produce una excepción si intentas acceder a una clave que no existe en el diccionario.

Ejemplo de uso

from collections import defaultdict

# Crear un defaultdict con valor predeterminado 0
counter = defaultdict(int)

# Contabilizar apariciones de elementos
elements = ["apple", "banana", "apple", "orange", "banana", "banana"]
for element in elements:
    counter[element] += 1

print(counter)  # { 'apple': 2, 'banana': 3, 'orange': 1 }

Counter

El Counter es una clase en la biblioteca estándar collections que se utiliza para contar el número de veces que aparece cada elemento en una secuencia o iterable.

Ejemplo de uso

from collections import Counter

# Crear un contador con elementos iterables
elements = ["apple", "banana", "apple", "orange", "banana", "banana"]
counter = Counter(elements)

print(counter)  # Counter({'banana': 3, 'apple': 2, 'orange': 1})

Uso combinado

Ambos defaultdict y Counter pueden ser usados juntos para contar las apariciones de elementos en una lista.

from collections import defaultdict, Counter

# Crear un defaultdict con valor predeterminado Counter()
multi_counter = defaultdict(Counter)

elements = [
    ("fruit", "apple"),
    ("fruit", "banana"),
    ("fruit", "apple"),
    ("vegetable", "carrot"),
    ("vegetable", "onion")
]

for category, item in elements:
    multi_counter[category][item] += 1

print(multi_counter)  # { 'fruit': Counter({'apple': 2, 'banana': 1}), 'vegetable': Counter({'carrot': 1, 'onion': 1}) }

Errores típicos / trampas

  1. No inicializar correctamente defaultdict: Asegúrate de que el valor predeterminado se inicializa correctamente.
   # Error: defaultdict con una función que no devuelve un diccionario
   wrong_counter = defaultdict(lambda x: [])
   print(wrong_counter["banana"])  # TypeError: 'int' object is not callable
  1. No usar Counter en el contexto adecuado: Asegúrate de que los elementos a contar sean hashables.
   elements = [1, "apple", (1, 2), "banana", {1: 2}]
   counter = Counter(elements)  # TypeError: unhashable type: 'dict'
  1. Confundir defaultdict con Counter: Asegúrate de usar el objeto correcto para cada tarea.
   # Error: Usar defaultdict en lugar de Counter
   wrong_counter = defaultdict(int)
   print(wrong_counter["banana"])  # 0 (no se ha contado nada)

Checklist accionable

  1. Inicializa correctamente defaultdict con el tipo adecuado como valor predeterminado.
  2. Verifica que los elementos a contar sean hashables al usar Counter.
  3. Utiliza Counter para contar frecuencias y defaultdict para manejar valores no encontrados.
  4. Asegúrate de que el uso del objeto sea correcto: defaultdict es una extensión del diccionario, mientras que Counter es una clase específica para contabilizar frecuencias.
  5. Testea los casos de uso con datos extremos y repetidos.

Siguientes pasos

  • Aprende a usar OrderedDict para mantener el orden en diccionarios.
  • Explora la documentación completa de collections para descubrir más herramientas útiles.
  • Practica con ejemplos reales en proyectos de IA para solidificar tu entendimiento.

¡Estos objetos pueden ser herramientas esenciales en tus desarrollos de IA y datos!

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).