Grâce à des gens formidables sur SO, j'ai découvert les possibilités offertes par collections.defaultdict, notamment en termes de lisibilité et de rapidité. Je les ai mis à profit avec succès.
Je voudrais maintenant implémenter trois niveaux de dictionnaires, les deux premiers étant defaultdictet le plus bas int. Je ne trouve pas la manière appropriée de faire cela. Voici ma tentative:
from collections import defaultdict
d = defaultdict(defaultdict)
a = [("key1", {"a1":22, "a2":33}),
("key2", {"a1":32, "a2":55}),
("key3", {"a1":43, "a2":44})]
for i in a:
d[i[0]] = i[1]
Maintenant, cela fonctionne, mais ce qui suit, qui est le comportement souhaité, ne fonctionne pas:
d["key4"]["a1"] + 1
Je soupçonne que j'aurais dû déclarer quelque part que le deuxième niveau defaultdictest de type int, mais je n'ai pas trouvé où ni comment le faire.
La raison pour laquelle j'utilise defaultdicten premier lieu est d'éviter d'avoir à initialiser le dictionnaire pour chaque nouvelle clé.
Une suggestion plus élégante?
Merci pythoneers!
multiprocessingest mécontent de les envoyer dans les deux sens.