defaultdict es excelente cuando el valor predeterminado es estático, como una nueva lista, pero no tanto si es dinámico.
Por ejemplo, necesito un diccionario para asignar cadenas a entradas únicas. defaultdict(int)siempre usará 0 para el valor predeterminado. Asimismo, defaultdict(intGen())siempre produce 1.
En cambio, usé un dict regular:
nextID = intGen()
myDict = {}
for lots of complicated stuff:
#stuff that generates unpredictable, possibly already seen str
strID = myDict.setdefault(myStr, nextID())
Tenga en cuenta que dict.get(key, nextID())es insuficiente porque también necesito poder hacer referencia a estos valores más adelante.
intGen es una pequeña clase que construyo que incrementa automáticamente un int y devuelve su valor:
class intGen:
def __init__(self):
self.i = 0
def __call__(self):
self.i += 1
return self.i
Si alguien tiene una manera de hacer esto defaultdict, me encantaría verlo.