Question
Asked By – Morlock
Thanks to some great folks on SO, I discovered the possibilities offered by collections.defaultdict
, notably in readability and speed. I have put them to use with success.
Now I would like to implement three levels of dictionaries, the two top ones being defaultdict
and the lowest one being int
. I don’t find the appropriate way to do this. Here is my attempt:
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]
Now this works, but the following, which is the desired behavior, doesn’t:
d["key4"]["a1"] + 1
I suspect that I should have declared somewhere that the second level defaultdict
is of type int
, but I didn’t find where or how to do so.
The reason I am using defaultdict
in the first place is to avoid having to initialize the dictionary for each new key.
Any more elegant suggestion?
Thanks pythoneers!
Now we will see solution for issue: Multiple levels of ‘collection.defaultdict’ in Python
Answer
Use:
from collections import defaultdict
d = defaultdict(lambda: defaultdict(int))
This will create a new defaultdict(int)
whenever a new key is accessed in d
.
This question is answered By – interjay
This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0