Multiple levels of 'collection.defaultdict' in Python
Question: 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!


Answer: Use:

    
    
    d = defaultdict(lambda: defaultdict(int))
    

This will create a new `defaultdict(int)` whenever a new key is accessed in
`d`.

