python 字典get、__getitem__、setdefault 对比

文章讲述了Python字典中的`setdefault`方法如何在查找键不存在时提供默认值,避免多次键查询,提高程序效率。对比了`get`和手动检查键是否存在的方式,强调`setdefault`的简洁与性能优势。
摘要由CSDN通过智能技术生成

在映射对象的方法里,setdefault 可能是比较微妙的一个。我们虽然并不会每次都用它,但是一旦它发挥作用,就可以节省不少次键查询,从而让程序更高效。

当字典 d[k] 不能找到正确的键的时候,Python 会抛出异常,这个行为符合 Python 所信奉的“快速失败”哲学。也许每个 Python 程序员都知道可以用 d.get(k, default) 来代替 d[k],给找不到的键一个默认的返回值(这比处理 KeyError 要方便不少)。但是要更新某个键对应的值的时候,不管使用 __getitem__ 还是 get 都会不自然,而且效率低。示例说明:

index = {'name': 'mmm', 'age': 18}
word = 'grade'

occurrences = index.get(word, [])  # 提取 word 出现的情况,如果还没有它的记录,返回 []。
occurrences.append("一年级")  # 把单词新出现的位置添加到列表的后面。
index[word] = occurrences  # 把新的列表放回字典中,这又牵扯到一次查询操作

示例处理单词出现情况的三行,通过 dict.setdefault 可以只用一行解决。

index = {'name': 'mmm', 'age': 18}
word = 'grade'

# 获取单词的出现情况列表,如果单词不存在,把单词和一个空列表放进映射,然后返回
# 这个空列表,这样就能在不进行第二次查找的情况下更新列表了。
index.setdefault(word, []).append("一年级")  

这二者等同也就是说,这样写:


# 方式一
my_dict.setdefault(key, []).append(new_value)


# 方式二
if key not in my_dict:
	my_dict[key] = []
my_dict[key].append(new_value)

二者的效果是一样的,只不过后者至少要进行两次键查询——如果键不存在的话,就是三次,用 setdefault 只需要一次就可以完成整个操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值