Dzięki kilku wspaniałym osobom z SO, odkryłem możliwości oferowane przez collections.defaultdict
, szczególnie w zakresie czytelności i szybkości. Użyłem ich z powodzeniem.Wiele poziomów "collection.defaultdict" w Pythonie
Teraz chciałbym wprowadzić trzy poziomy słowników, z których dwa to: defaultdict
, a najniższy to int
. Nie znajduję odpowiedniego sposobu na zrobienie tego. 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 dodaje się, co jest pożądane zachowanie, nie:
d["key4"]["a1"] + 1
Podejrzewam, że powinienem gdzieś ogłosił, że drugi poziom defaultdict
jest typu int
, ale nie znalazłem gdzie i jak to zrobić.
Powodem, dla którego używam defaultdict
w pierwszej kolejności, jest unikanie konieczności inicjowania słownika dla każdego nowego klucza.
Jakaś bardziej elegancka propozycja?
Dzięki pythonom!
Jedynym problemem jest to, że nie będzie się ono rozpadać, co oznacza, że "przetwarzanie wieloprocesowe" jest niezadowolone z wysyłania tych plików do iz powrotem. – Noah
@Noah: Zachwyci się, jeśli użyje się nazwanej funkcji poziomu modułu zamiast lambda. – interjay
oczywiście, głupio mnie. – Noah