Defaultdict 和 lambda 函数一起使用

Defaultdict and lambda function used together

我试图理解一些代码,我发现了以下脚本:

defaultdict(lambda: defaultdict(lambda: 0))

我对 defaultdict 和 lambda 函数都不熟悉。我怀疑这相当于初始化一个字典,它的值也是一个字典。我说得对吗?

一个lambda表达式就地定义了一个函数。参数在 : 之前,函数的结果在它之后。例如:

>>> inc = lambda x: x+1
>>> inc(3)
4
>>> add = lambda x, y: x + y
>>> add(19, 23)
42
>>> zero = lambda: 0
>>> zero()
0

defaultdict 是一个 dict,它会在您使用不存在的密钥访问它时创建一个默认值。它通过调用您传递给它的函数来做到这一点。一个常见的用例是通过 defaultdict 创建一个计数器,该 defaultdict 会自动创建可以递增的零值:

>>> foo = defaultdict(lambda: 0)
>>> foo["bar"]
0
>>> foo["bar"] += 1
>>> foo["bar"]
1

由于 defaultdict 使用的函数可以是任何东西,我们可以通过给外部字典一个函数来嵌套它们 returns 一个内部 defaultdict:

>>> foo = defaultdict(lambda: defaultdict(lambda: 0))
>>> foo["bar"]["baz"]
0