defaultdict
est génial lorsque la valeur par défaut est statique, comme une nouvelle liste, mais pas tellement si elle est dynamique.
Par exemple, j'ai besoin d'un dictionnaire pour mapper des chaînes sur des entiers uniques. defaultdict(int)
utilisera toujours 0 comme valeur par défaut. De même, defaultdict(intGen())
produit toujours 1.
Au lieu de cela, j'ai utilisé un dict régulier:
nextID = intGen()
myDict = {}
for lots of complicated stuff:
strID = myDict.setdefault(myStr, nextID())
Notez que dict.get(key, nextID())
c'est insuffisant car je dois également pouvoir me référer à ces valeurs plus tard.
intGen
est une petite classe que je construis qui incrémente automatiquement un int et renvoie sa valeur:
class intGen:
def __init__(self):
self.i = 0
def __call__(self):
self.i += 1
return self.i
Si quelqu'un a un moyen de faire cela avec, defaultdict
j'aimerais le voir.
defaultdict
. Pouvez-vous donner un exemple de ce que vous voulez dire dans le premier paragraphe?