Python defaultdict中get方法在[]操作前后返回值变化的疑问
Python defaultdict中get方法在[]操作前后返回值变化的疑问
嘿,这个问题其实是对defaultdict的get方法和[]访问逻辑的理解差异导致的,完全不是bug,咱们一步步拆解清楚:
首先得明确两个核心逻辑:
defaultdict的默认工厂函数(你这里的lambda:6)只有在使用[]访问不存在的键时才会触发——触发时不仅会返回生成的默认值,还会把这个键和默认值一起添加到字典里。get方法的规则是:如果键存在就返回对应值;如果不存在,就返回你传入的第二个参数(没传的话默认是None),它不会触发defaultdict的工厂函数,也不会往字典里添加新的键值对。
结合你的代码和输出咱们逐行看:
- 初始化
my_dict = defaultdict(lambda: 6, a=7)后,字典里只有"a":7这一组键值对。 - 第一次调用
my_dict.get("b"):字典里没有"b",又没给get传默认值参数,所以返回None——这时候字典里依然没有"b"。 - 调用
my_dict["b"]:触发了defaultdict的__getitem__方法,工厂函数生成6,同时把"b":6添加到字典里,所以输出6。 - 第二次调用
my_dict.get("b"):这时候字典里已经有"b":6了,get找到这个键,自然返回6。
你提问里有个小笔误(说第二次get返回None),不过核心疑问很清晰~简单说就是:[]操作把"b"加到字典里了,之后get就能取到它的值了,这是完全符合defaultdict设计逻辑的正常行为哦。
备注:内容来源于stack exchange,提问作者Avihai Shalom
相关产品推荐
相关产品推荐

