Python之dict的setdefault用法
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 sysWORD_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() + 1location = (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
只需要进行一次查询.
Python之dict的setdefault用法相关推荐
- python中dict的fromkeys用法教程
fromkeys是创造一个新的字典.就是事先造好一个空字典和一个列表,fromkeys会接收两个参数,第一个参数为从外部传入的可迭代对象,会将循环取出元素作为字典的key值,另外一个参数是字典的val ...
- python中dict的fromkeys用法
fromkeys是创造一个新的字典.就是事先造好一个空字典和一个列表,fromkeys会接收两个参数,第一个参数为从外部传入的可迭代对象,会将循环取出元素作为字典的key值,另外一个参数是字典的val ...
- python dict setdefault_Python dict setdefault()用法及代码示例
字典Python中的数据是一个无序的数据值集合,用于存储数据值(如Map),与其他仅将单个值作为元素的数据类型不同,Dictionary拥有key:value对. 在Python字典中,setdefa ...
- Python的dict字典结构操作方法学习笔记
Python的dict字典结构操作方法学习笔记 这篇文章主要介绍了Python的dict字典结构操作方法学习笔记本,字典的操作是Python入门学习中的基础知识,需要的朋友可以参考下 一.字典的基本方 ...
- Python 字典 dict() 函数
描述 Python 字典 dict() 函数用于创建一个新的字典,用法与 Pyhon 字典 update() 方法相似. 语法 dict() 函数函数语法: dict(key/value) 参数说明: ...
- python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发
strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...
- Python中的解包用法
Python中的解包用法 解包(unpacking:解包,拆包),基本意思将容器里面的元素逐个取出来使用.封包(packing:封包,打包)基本意思将多个元素合起来作为一个整体使用. 可迭代对象支持解 ...
- Python变量与注释高级用法
Python变量与注释高级用法 1.概述 好的变量和注释并非为计算机而写,而是为每个阅读代码的人而写.变量与注释是表达作者思想的基础,他们对代码质量的贡献母庸质疑. 2.变量 2.1.变量解包 1.什 ...
- python读取json格式文件大量数据,以及python字典和列表嵌套用法详解
1.Python读取JSON报错:JSONDecodeError:Extra data:line 2 column 1 错误原因: JSON数据中数据存在多行,在读取数据时,不能够单单用open(), ...
最新文章
- 华为服务器型号查询,服务器设备型号查询
- poi实现excel数据导入数据库
- 【java】java 并发编程 LinkedBlockingDeque
- elementui树状菜单tree_Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)...
- python 两点曲线_全方位比较3种数据科学工具的比较:Python、R和SAS(附链接)
- Windows 2003中如何启动IIS6的GZIP压缩网页传输(补充)
- 《信号与系统学习笔记》—信号与系统(一)
- 控制 计算机某个程序自动开关,电脑自动开关机软件(示例代码)
- js中常遇到 切割截取字符串的几种方法
- Linux Vim 退出命令
- 安卓wifi连接 UID xxx does not have permission to update configuration “xxx“WPA_PSK
- [ Linux RK3568 ] 手动/自动调整千兆网口延时TX RX |CSDN创作打卡
- 反汇编工具OD(OllyDebug)
- 呷哺呷哺的中年危机与贺光启的囚徒困境
- 弹孔,血迹 等受击表现
- c语言 游程编码,简单的行程编码-C语言实现
- 安卓app对接网络验证系统一机一码源码脚本教程,一键注入网络验证工具
- 公钥(RSA)加密应用场景
- widget安卓桌面插件初步使用
- 郭敬明:定期关注大数据,指导《小时代》
热门文章
- AI让城市交通管理更“智慧”
- C/C++ 数字三角形
- html div表格代码,Table tr th td html表格标签
- Oracle 导出导入数据库
- 人脸识别人证比对技术SDK
- python算法面试题及答案,python面试题详细总结(附答案)
- xshell打开多个窗口_winscp使用教程xshell,winscp使用教程xshell,软件详情对比
- python asyncio原理_Asyncio 源码分析
- framework之深入surface系统
- PRD里面,一个完整的功能模块需求,应该怎么写?