This is a pretty subjective question from my perspective. For me, the real question would be at what point do you promote this nested data structure to objects with methods to insulate you from changes. However, I've been known to create large prototyping namespaces with the following:
from collections import defaultdict
def nesteddict():
return defaultdict(nesteddict)