defaultdict
é ótimo quando o valor padrão é estático, como uma nova lista, mas não tanto se for dinâmico.
Por exemplo, preciso de um dicionário para mapear seqüências de caracteres para ints exclusivos. defaultdict(int)
sempre usará 0 para o valor padrão. Da mesma forma, defaultdict(intGen())
sempre produz 1.
Em vez disso, usei um ditado regular:
nextID = intGen()
myDict = {}
for lots of complicated stuff:
#stuff that generates unpredictable, possibly already seen str
strID = myDict.setdefault(myStr, nextID())
Observe que isso dict.get(key, nextID())
é insuficiente, porque também preciso consultar esses valores posteriormente.
intGen
é uma classe minúscula que eu construo que incrementa automaticamente um int e retorna seu valor:
class intGen:
def __init__(self):
self.i = 0
def __call__(self):
self.i += 1
return self.i
Se alguém tem uma maneira de fazer isso, defaultdict
eu adoraria vê-lo.