python - Defaultdict 和 lambda 函数一起使用
问题描述
我试图理解一些代码,我发现了以下脚本:
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 来创建一个计数器,它会自动创建零值,然后可以递增:
>>> foo = defaultdict(lambda: 0)
>>> foo["bar"]
0
>>> foo["bar"] += 1
>>> foo["bar"]
1
由于 a 使用的函数defaultdict
可以是任何东西,我们可以通过给外部 dict 一个返回内部的函数来嵌套它们defaultdict
:
>>> foo = defaultdict(lambda: defaultdict(lambda: 0))
>>> foo["bar"]["baz"]
0
推荐阅读
- java - 长按longclick事件时如何实现提示对话框?
- image - 当应用程序部署在新服务器中时,如果图像不是仅在 InternetExplorer 中呈现,问题可能出在哪里?
- apache-nifi - 如何使用 FreeFormTextRecordSetWriter
- android - Android导航组件中的条件导航
- python-3.x - 如何将一个值与一系列其他值取模?
- android - FAB backgroundTintList,不起作用并设置边框颜色
- chart.js - 为什么平移(和缩放)在我的 Chart.js 图表上不起作用?
- c# - Filehelpers 库无法读取 ™ 字符
- c++ - std::unordered_set::reserve 对容器内存要求的作用?
- regex - 匹配整个多行模式,多次但如果匹配包含字符串则不匹配