defaultdict嵌套lambda表达式的代码含义及判断正确性咨询
结论
你的判断基本正确,这个语句创建的是双层嵌套字典,外层字典的默认值是内层字典,同时内层字典的默认值为0,比普通的嵌套字典多了自动初始化的特性。
知识点拆分
1. lambda表达式
你这里用到的两个都是无参匿名函数:
lambda: 0:调用时不需要传入任何参数,固定返回整数0lambda: defaultdict(lambda: 0):调用时不需要传入参数,固定返回一个「默认值为0的defaultdict实例」
2. defaultdict用法
defaultdict是Python标准库collections模块提供的字典子类,和普通字典的核心区别是:访问不存在的key时不会抛出KeyError,会自动执行初始化时传入的可调用对象生成默认值,自动将该key和默认值关联后返回。
语句逐层解析
我们从内到外拆解这个语句:
- 内层
defaultdict(lambda: 0):生成一个普通的单层defaultdict,访问任意不存在的key时,都会自动赋值为0,适合做一维计数场景 - 外层
defaultdict(lambda: <内层defaultdict>):生成外层字典,访问任意不存在的key时,都会自动赋值为上面提到的内层defaultdict实例,不需要手动为外层key先初始化字典
实际使用示例
from collections import defaultdict # 初始化你提到的双层defaultdict count_map = defaultdict(lambda: defaultdict(lambda: 0)) # 无需提前初始化外层key,直接给二层key赋值 count_map["水果"]["苹果"] += 1 count_map["水果"]["香蕉"] += 3 count_map["蔬菜"]["白菜"] += 2 # 访问不存在的二层key直接返回0,不会报错 print(count_map["水果"]["橙子"]) # 输出 0 # 访问不存在的外层key自动生成空的内层defaultdict print(count_map["文具"]) # 输出 defaultdict(<function <lambda> at ...>, {})
这种结构非常适合二维计数、分类统计类的场景,省去了大量判断key是否存在的冗余代码。
内容的提问来源于stack exchange,提问作者Hermes Morales
相关产品推荐
相关产品推荐

