En Python, los diccionarios (dict) son una de las estructuras de datos más versátiles de las que disponemos cuando estamos programando. Sin embargo, en situaciones donde necesitamos inicializar claves automáticamente, el diccionario estándar nos puede resultar incómodo. Esto se manifiesta especialmente cada vez que intentamos acceder a una clave que no existe, lanzando Python, en esos casos, un KeyError, obligándonos a comprobar su existencia o a inicializarla manualmente.
Sin embargo, para resolver este tipo de situaciones, contamos en Python, con una muy útil herramienta, dentro del módulo collections: El defaultdict, un diccionario que crea automáticamente un valor por defecto para cualquier clave inexistente. De modo que cuando intentemos acceder a una clave que aún no exista en el diccionario, en lugar de lanzar un KeyError, defaultdict la creará automáticamente sin tener, nosotros, que preocuparnos de iniciarlas ni de comprobar si están ya definida.
EJEMPLOS DE USO.
Uno de los casos más comunes de defaultldict es el de contar elementos sin la necesidad de preocuparnos por inicializar valores. Por ejemplo, pongamos el caso que queremos contar cuantas veces se repite cada letra en la palabra ‘mississippi’. Si no contáramos con esta herramienta tendríamos que hacerlo de un modo tal como este:

OUTPUT:

Como se ve, empezamos definiendo nuestro diccionario conteo, para a continuación iterar sobre nuestra palabra, comprobando si la letra actual se encuentra como clave en conteo. De modo que de no ser así, se añadirá al diccionario con valor inicial 0 (conteo[letra] = 0). Por contra, en caso de encontrarse ya en el diccionario, se le añadirá 1 a su valor asociado (conteo[letra] += 1).
Tal y como hemos señalado, podemos ahorrarnos esa comprobación, haciendo uso de defaultdict el cual, importaremos previamente desde el módulo collections:

OUTPUT:

En este caso, hemos definido nuestro defaultdict conteo, pasando como único argumento el tipo de dato que van a constituir los valores incluidos en el diccionario. Dado que lo que queremos hacer aquí es contar el número de veces que se repite cada letra de una palabra, estableceremos el tipo de dato entero (int). Tras ello ya simplemente realizaremos la iteración sobre la palabra sin necesidad de realizar la comprobación que efectuábamos en el caso anterior.
También puede ser útil para otras tareas tales como agrupar elementos en listas. Por ejemplo, imaginemos que queremos agrupar estos en dos categorías: frutas y colores. Para ello solo tendremos que crear un defaultdict especificando, en este caso, que los valores van a ser listas (list):

OUTPUT:

CONCLUSIÓN:
Concluimos, pues, que defaultdict es una herramienta sencilla pero extremadamente útil que en Python, nos permitirá escribir código más limpio y eficiente. Evitando inicializaciones manuales, facilitando agrupamientos y simplificando contadores. hacçiendo que trabajar con diccionarios complejos sea mucho más cómodo. De modo que, si trabajas con colecciones de datos, análisis, estructuras dinámicas o algoritmos de clasificación, es uno de esos conceptos que vale la pena dominar desde el principio.
Saludos.

