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.