【问题标题】:What exactly does the type lambda do when used with defaultdict当与 defaultdict 一起使用时,类型 lambda 究竟做了什么
【发布时间】:2017-08-12 07:19:30
【问题描述】:

我记得这个例子

from collections import defaultdict
d_int = defaultdict(int, a=10, b=12, c=13)
d_int.default_factory = lambda: 1
d_int['d']
1

当我们传递一个未知键时,它返回默认值而不是错误,我理解这一点。 但是在这个 SO 问题中,populating a nested dictionary 事情变得更加复杂。

final = collections.defaultdict(lambda: collections.defaultdict(list))

这种情况下 lambda 类型的作用是什么?

【问题讨论】:

    标签: python


    【解决方案1】:

    这种默认字典对 2 级数据很有用。像这样的:

    { k11 : { k21 : [...], k22 : [...] }, k12 : { ... } }
    

    这里,每个字典都是defaultdict

    当第一级键不存在时,lambda 返回第二级defaultdict

    In [234]: final['k11'] # first level access
    Out[234]: defaultdict(list, {})
    
    In [235]: final['k11']['k21']  # second level access
    Out[235]: []
    

    【讨论】:

      【解决方案2】:

      defaultdict 需要一个函数(工厂)。

      在第二种情况下,您需要创建一个collections.defaultdict(list)。为此,您需要一个函数,并且使用 lambda 内联定义此函数会更简单,该 lambda 会生成一个新的 collections.defaultdict(list) 对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-23
        • 2016-09-10
        • 2023-03-15
        • 2012-10-17
        • 2021-06-04
        • 1970-01-01
        • 2018-07-30
        • 2019-10-06
        相关资源
        最近更新 更多