为什么需要lambda来嵌套defaultdict?

Why do you need lambda to nest defaultdict?

我有点困惑为什么你需要一个 lambda 函数来嵌套 defaultdict

你为什么不能这样做?

test = defaultdict(defaultdict(list))

而不是

test = defaultdict(lambda:defaultdict(float))
test = defaultdict(defaultdict(list))

因为 defaultdict 要求您给它一些可以 调用的东西 来为缺失值创建键。 list 是这样一个可调用的,但 defaultdict(list) 不是。这是一个 defaultdict 实例,你不能调用 defaultdict.

lambda 是一个函数,当被调用时, returns 一个可以在字典中使用的值,所以它起作用了。

本质上,defaultdict(list) 将在 之前 被评估,你的 defaultdict 被实例化,你想 延迟 直到遇到丢失的键。这就是这里使用可调用对象(类型或函数)的原因。