defaultdict
Inicialice automáticamente los valores del diccionario
defaultdict es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.
El problema de las claves inexistentes
Con un dict normal, acceder a una clave que no existe genera un KeyError. Esto resulta molesto cuando desea construir valores de forma incremental.
d = {}
try:
d['x'].append(1)
except KeyError as e:
print('KeyError:', e)Entra defaultdict
defaultdict, del módulo collections, recibe una función de fábrica que produce un valor predeterminado para cualquier clave inexistente. Impórtelo con from collections import defaultdict.
from collections import defaultdict
d = defaultdict(int)
print(d['missing'])
print(dict(d))Contar con int
Con defaultdict(int), las claves inexistentes tienen el valor predeterminado 0, por lo que puede incrementarlas sin comprobarlas antes.
from collections import defaultdict
counts = defaultdict(int)
for ch in 'banana':
counts[ch] += 1
print(dict(counts))Agrupar con list
defaultdict(list) crea una lista vacía para las claves nuevas, lo que resulta perfecto para agrupar elementos en categorías.
from collections import defaultdict
groups = defaultdict(list)
words = ['apple', 'ant', 'bee', 'bear']
for w in words:
groups[w[0]].append(w)
print(dict(groups))Recopilar con set
Use defaultdict(set) cuando quiera valores únicos por clave. Los duplicados se eliminan automáticamente.
from collections import defaultdict
seen = defaultdict(set)
pairs = [('a', 1), ('a', 1), ('a', 2), ('b', 3)]
for k, v in pairs:
seen[k].add(v)
print(dict(seen))La fábrica debe ser invocable
El argumento es un objeto invocable que no recibe argumentos y devuelve el valor predeterminado. int, list, set y dict funcionan porque al invocarlos devuelven un valor vacío.
from collections import defaultdict
print(int())
print(list())
print(set())Valor predeterminado personalizado con lambda
Puede proporcionar cualquier objeto invocable sin argumentos, como un lambda, para devolver un valor predeterminado personalizado.
from collections import defaultdict
scores = defaultdict(lambda: 100)
print(scores['new_player'])
scores['alice'] -= 10
print(dict(scores))defaultdict anidados
Una fábrica puede crear a su vez un defaultdict, lo que permite construir estructuras anidadas sin configurarlas manualmente.
from collections import defaultdict
table = defaultdict(lambda: defaultdict(int))
table['fruit']['apples'] += 3
table['fruit']['pears'] += 2
print(table['fruit']['apples'])
print(table['fruit']['pears'])Acceder crea la clave
Tenga en cuenta que simplemente leer una clave inexistente la inserta con el valor predeterminado. Después de acceder a ella, la clave existe en el diccionario.
from collections import defaultdict
d = defaultdict(int)
_ = d['ghost']
print('ghost' in d)
print(dict(d))Comprobar sin insertar
Para comprobar una clave sin crearla, use el método .get() o el operador in, que nunca activan la fábrica.
from collections import defaultdict
d = defaultdict(int)
print(d.get('safe', 'default'))
print('safe' in d)
print(dict(d))Convertir de nuevo en dict
Envuelva un defaultdict en dict() cuando quiera obtener un diccionario normal, por ejemplo, antes de devolverlo desde una función o imprimirlo con un formato limpio.
from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1)
plain = dict(dd)
print(type(plain))
print(plain)Comprobación rápida
¿Qué representa el argumento que se pasa a defaultdict?
Repaso: defaultdict
Aspectos clave:
defaultdict(factory)crea automáticamente valores para las claves inexistentes.intproporciona 0 (para contar),listproporciona [] (para agrupar) ysetproporciona un conjunto vacío (para agrupar valores únicos).- La fábrica es cualquier objeto invocable sin argumentos, incluido un
lambda. - Leer una clave inexistente la inserta; use
.get()oinpara consultarla de forma segura.
from collections import defaultdict
g = defaultdict(list)
for w in ['cat', 'cow', 'dog']:
g[w[0]].append(w)
print(dict(g))Preguntas frecuentes
¿La lección «defaultdict» es gratis?
Sí — el texto completo de «defaultdict» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.
¿Qué aprenderé en «defaultdict»?
Inicialice automáticamente los valores del diccionario Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Python Academy?
No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «defaultdict»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Python Academy?
Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Counter
- defaultdict
- deque
- namedtuple y OrderedDict