python - 使用 lambda 和 defaultdict
问题描述
我正在阅读有关集合 defaultdict 并遇到以下代码行:
import collections
tree = lambda: collections.defaultdict(tree)
some_dict = tree()
some_dict['colours']['favourite'] = "yellow"
我知道 lamba 需要一个变量并对其执行一些功能。我见过 lambda 是这样使用的: lambda x: x + 3 在上面的第二行代码中,lambda 采用什么变量以及它执行什么功能?
我也明白 defaultdict 可以采用 int 或 list 等参数。在第二行中,defaultdict 采用参数树,它是一个变量。那有什么意义呢?
解决方案
代码大致相当于(忽略def
语句引入的元数据)
import collections
def tree():
return collections.defaultdict(tree)
some_dict = tree()
some_dict['colours']['favourite'] = "yellow"
该lambda
表达式简单地定义了一个零参数的函数,并且该函数绑定到 name tree
。
通常,只有lambda
在您真正需要匿名函数时才使用表达式,例如将其作为参数传递给另一个函数,如
sorted_list = sorted(some_list_of_tuples, key=lambda x: x[0])
def
当您确实需要命名函数时,使用语句被认为是更好的做法。
defaultdict
需要一个可调用对象,用于为新键生成默认值。int()
返回 0,list()
返回一个空列表,并tree()
返回一个新的defaultdict
;它们都可以用作defaultdict
. tree
定义返回 a的递归性质defaultdict
使用自身作为默认值生成器,这意味着您可以生成任意深度的嵌套字典;每个“叶子”字典本身就是另一个defaultdict
。
推荐阅读
- typescript - 通过 AWS CDK Typescript 进行 VPC 对等互连(2 个 VPCS 在 2 个不同的账户中)
- c# - 禁用自定义控件Win Form的Enable Property的自定义功能
- c++ - 如何返回 3 个值之间的最大值?
- python - 错误:Errno 套接字错误] [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:727)
- ios - 如何重置 Apple Developer Enrollment 以开始步骤
- python - 如何使用预训练模型填充缺失值?
- python - 创建一个新列但创建数据框的副本
- macos - 监听 tcp 127.0.4.1:2040:绑定:无法分配请求的地址
- asp.net-mvc - ASP.NET Core:添加脚手架项时出现 FileNotFound 错误
- c++ - UE4 C++:无法在圆形路径中移动 Actor