In someone else’s code I read the following two lines:
x = defaultdict(lambda: 0)
y = defaultdict(lambda: defaultdict(lambda: 0))
As the argument of defaultdict is a default factory, I think the first line means that when I call x[k] for a nonexistent key k (such as a statement like v=x[k]), the key-value pair (k,0) will be automatically added to the dictionary, as if the statement x[k]=0 is first executed. Am I correct?
And what about y? It seems that the default factory will create a defaultdict with default 0. But what does that mean concretely? I tried to play around with it in Python shell, but couldn’t figure out what it is exactly.
That’s right. This is more idiomatically written
In the case of
y, when you doy["ham"]["spam"], the key"ham"is inserted inyif it does not exist. The value associated with it becomes adefaultdictin which"spam"is automatically inserted with a value of0.I.e.,
yis a kind of “two-tiered”defaultdict. If"ham" not in y, then evaluatingy["ham"]["spam"]is like doingin terms of ordinary
dict.