Please explain collections.defaultdict(lambda: 1)

Paul McGuire ptmcg at
Tue Nov 6 16:17:34 CET 2007

On Nov 6, 8:54 am, "" <metap... at> wrote:
> I'm reading
> and do not understand the expression listed in the subject which is
> part of this function:
> def train(features):
>     model = collections.defaultdict(lambda: 1)
>     for f in features:
>       model[f] += 1
>     return model
> Per
> It seems that there is a default factory which initializes each key to
> 1. So by the end of train(), each member of the dictionary model will
> have value >= 1
> But why wouldnt he set the value to zero and then increment it each
> time a "feature" (actually a word) is encountered? It seems that each
> model value would be 1 more than it should be.

The explanation is a little further down on that same page, on the
discussion of "novel" words and avoiding the probablity of them being
0 just because they have not yet been seen in the training text.

-- Paul

More information about the Python-list mailing list