Python之dict的setdefault用法

本文探讨了Python字典dict的setdefault方法如何通过减少键的查询次数提高程序效率,对比get方法和__getitem__,并通过实例展示了其在文本处理中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dict的setfault方法我们可能使用的比较少,但是一旦使用则可以减少键的查询次数,从而让程序更高效.

源码注释:D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
说明:当D中不存在k时,相当于D.get(k,d) 和 D[k]=d;否则相当于D.get(k,d).

使用setfault处理找不到的键
当使用d[k]查找不正确的键k时,则会抛出异常KeyError;我们可以使用d.get(k, default)来代替d[k](当找不到键k时返回一个默认的值);但是当我们要更新键对应的值时候,使用__getitem__get都效率比较低,此时使用setfault则更高效.

例如下面的例子:从文本文件中读取数据并记录单词的行号和在每行中的索引位置.

文本文件
python11111book
java22222java
javascript33333javascript
python程序
import re
import sys

WORD_RE = re.compile(r'[a-zA-Z]+')
index = {}
with open('word.txt', 'rb') as f:
    for line_no, line in enumerate(f, 1):
        for match in WORD_RE.finditer(line):
            word = match.group()
            column_no = match.start() + 1
            location = (line_no, column_no)
            index.setdefault(word, []).append(location)
print(index)
输出
{'python': [(1, 1)], 'book': [(1, 12)], 'java': [(2, 1), (2, 10)], 'javascript': [(3, 1), (3, 16)]}
分析
index.setdefault(word, []).append(location)

if key not in index:
    index[word] = []
index[word].append(location)

二者是等价的,但是前者的效率比后者高,原因:后者如果键word存在时需要进行两次查询,否则需要进行三次查询,最后才能更新;而使用setfault只需要进行一次查询.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值