Aplicaciones prácticas del defaultdict
Contar ocurrencias
Uno de los casos de uso más comunes del defaultdict es contar las ocurrencias de elementos en una lista o cualquier otro iterable. Aquí tienes un ejemplo:
from collections import defaultdict
## Count the occurrences of elements in a list
fruits = ['apple', 'banana', 'cherry', 'apple', 'banana', 'cherry', 'cherry']
fruit_count = defaultdict(int)
for fruit in fruits:
fruit_count[fruit] += 1
print(fruit_count)
## Output: defaultdict(<class 'int'>, {'apple': 2, 'banana': 2, 'cherry': 3})
En este ejemplo, usamos un defaultdict con un valor predeterminado de int para contar las ocurrencias de cada fruta en la lista fruits.
Agrupar datos
Otro caso de uso común del defaultdict es agrupar datos basados en una cierta clave, donde el número de grupos no se conoce de antemano. Aquí tienes un ejemplo:
from collections import defaultdict
## Group students by their grades
students = [
{'name': 'Alice', 'grade': 'A'},
{'name': 'Bob', 'grade': 'B'},
{'name': 'Charlie', 'grade': 'A'},
{'name': 'David', 'grade': 'C'},
{'name': 'Eve', 'grade': 'B'}
]
grade_groups = defaultdict(list)
for student in students:
grade_groups[student['grade']].append(student['name'])
print(grade_groups)
## Output: defaultdict(<class 'list'>, {'A': ['Alice', 'Charlie'], 'B': ['Bob', 'Eve'], 'C': ['David']})
En este ejemplo, usamos un defaultdict con un valor predeterminado de list para agrupar a los estudiantes por sus calificaciones. Las claves en el diccionario grade_groups son las calificaciones únicas, y los valores son listas de nombres de estudiantes para cada calificación.
Diccionarios anidados
El defaultdict también es útil cuando se trabaja con diccionarios anidados, ya que puede ayudarte a evitar excepciones KeyError al acceder a claves anidadas. Aquí tienes un ejemplo:
from collections import defaultdict
## Create a nested dictionary using defaultdict
person_data = defaultdict(lambda: defaultdict(str))
person_data['Alice']['age'] = 25
person_data['Alice']['city'] = 'New York'
person_data['Bob']['age'] = 30
person_data['Bob']['city'] = 'Los Angeles'
print(person_data)
## Output: defaultdict(<function <lambda> at 0x7f6a8c0c8820>, {'Alice': {'age': 25, 'city': 'New York'}, 'Bob': {'age': 30, 'city': 'Los Angeles'}})
En este ejemplo, creamos un defaultdict anidado donde el diccionario exterior tiene un valor predeterminado de otro defaultdict con un valor predeterminado de una cadena vacía. Esto nos permite agregar fácilmente nuevas claves y valores al diccionario anidado sin tener que verificar si las claves intermedias existen.
graph TD
A[Counting Occurrences] --> B[Grouping Data]
B --> C[Nested Dictionaries]
C --> D[Other Applications]
Estos son solo algunos ejemplos de las aplicaciones prácticas del defaultdict en Python. La versatilidad de esta estructura de datos la convierte en una herramienta valiosa en una amplia gama de escenarios de programación.