Python中defaultdict的[]访问与get()返回结果不一致是正常行为吗?
问题解答
这是defaultdict的正常设计行为,二者的底层实现逻辑本身就存在差异:
- 下标访问
d[key]触发的是defaultdict重写的__getitem__方法:当目标key不存在时,会自动调用你传入的默认工厂函数生成默认值,同时将这个key和默认值存入字典后返回结果,所以d[0]会返回"test"符合设计预期。 get()方法是defaultdict从普通dict继承的原生方法,它的逻辑从未被修改:方法内部只会判断key是否已经存在于字典中,存在就返回对应值,不存在就直接返回方法第二个参数指定的默认值(未传该参数时默认返回None),全程不会触发默认工厂函数的执行。
你可以先执行一次d[0]完成键值对的写入,之后再调用d.get(0)就会正常返回"test"。如果不想触发键写入又要拿到默认值,也可以显式给get传第二个参数,比如d.get(0, "test")。
内容的提问来源于stack exchange,提问作者Bram
相关产品推荐
相关产品推荐

