Please explain collections.defaultdict(lambda: 1)

Paul McGuire ptmcg at austin.rr.com
Tue Nov 6 10:17:34 EST 2007


On Nov 6, 8:54 am, "metaperl.com" <metap... at gmail.com> wrote:
> I'm readinghttp://norvig.com/spell-correct.html
>
> 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
>
> Perhttp://docs.python.org/lib/defaultdict-examples.html
>
> 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