Grazie ad alcune persone fantastiche su SO, ho scoperto le possibilità offerte da collections.defaultdict
, in particolare in leggibilità e velocità. Li ho usati per il successo.Livelli multipli di "collection.defaultdict" in Python
Ora vorrei implementare tre livelli di dizionari, i primi due sono defaultdict
e il più basso è int
. Non trovo il modo appropriato per farlo. Ecco il mio tentativo:
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]
Ora questo funziona, ma quanto segue, che è il comportamento desiderato, non:
d["key4"]["a1"] + 1
Ho il sospetto che avrei dichiarato da qualche parte che il secondo livello defaultdict
è di tipo int
, ma non ho trovato dove o come farlo.
Il motivo per cui sto usando defaultdict
in primo luogo è evitare di dover inizializzare il dizionario per ogni nuova chiave.
Qualche suggerimento più elegante?
Grazie a Pythoneers!
L'unico problema è che non decapiterà, il che significa che "multiprocessing" non è felice di inviare questi avanti e indietro. – Noah
@Noah: si salverà se si utilizza una funzione di livello modulo denominata anziché una lambda. – interjay
ovviamente, stupido. – Noah