首页 > 解决方案 > 使用 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 采用参数树,它是一个变量。那有什么意义呢?

标签: pythonlambdadefaultdict

解决方案


代码大致相当于(忽略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


推荐阅读