Chciałabym wdrożyć trzy poziomy słowników, dwa najwyższe to defaultdict, a najniższy int. Nie znajduję odpowiedniego sposobu, aby to zrobić. Oto moja próba:
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]
Teraz to działa, ale poniższe zachowanie, które jest pożądanym zachowaniem, nie działa:
d["key4"]["a1"] + 1
Podejrzewam, że powinnam była gdzieś zadeklarować, że defaultdict
drugiego poziomu jest typu int, ale nie znalazłam, gdzie i jak to zrobić.
Powodem, dla którego używam defaultdict, jest uniknięcie konieczności inicjowania słownika dla każdego nowego klucza.
Jakieś bardziej eleganckie sugestie?
Dzięki!
1 odpowiedź
Użyj:
from collections import defaultdict
d = defaultdict(lambda: defaultdict(int))
Spowoduje to utworzenie nowego defaultdict (int) przy każdym dostępie do nowego klucza d.