Wiele poziomów „collection.defaultdict” w Pythonie

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.

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.