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用法相关推荐

  1. python中dict的fromkeys用法教程

    fromkeys是创造一个新的字典.就是事先造好一个空字典和一个列表,fromkeys会接收两个参数,第一个参数为从外部传入的可迭代对象,会将循环取出元素作为字典的key值,另外一个参数是字典的val ...

  2. python中dict的fromkeys用法

    fromkeys是创造一个新的字典.就是事先造好一个空字典和一个列表,fromkeys会接收两个参数,第一个参数为从外部传入的可迭代对象,会将循环取出元素作为字典的key值,另外一个参数是字典的val ...

  3. python dict setdefault_Python dict setdefault()用法及代码示例

    字典Python中的数据是一个无序的数据值集合,用于存储数据值(如Map),与其他仅将单个值作为元素的数据类型不同,Dictionary拥有key:value对. 在Python字典中,setdefa ...

  4. Python的dict字典结构操作方法学习笔记

    Python的dict字典结构操作方法学习笔记 这篇文章主要介绍了Python的dict字典结构操作方法学习笔记本,字典的操作是Python入门学习中的基础知识,需要的朋友可以参考下 一.字典的基本方 ...

  5. Python 字典 dict() 函数

    描述 Python 字典 dict() 函数用于创建一个新的字典,用法与 Pyhon 字典 update() 方法相似. 语法 dict() 函数函数语法: dict(key/value) 参数说明: ...

  6. python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发

    strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...

  7. Python中的解包用法

    Python中的解包用法 解包(unpacking:解包,拆包),基本意思将容器里面的元素逐个取出来使用.封包(packing:封包,打包)基本意思将多个元素合起来作为一个整体使用. 可迭代对象支持解 ...

  8. Python变量与注释高级用法

    Python变量与注释高级用法 1.概述 好的变量和注释并非为计算机而写,而是为每个阅读代码的人而写.变量与注释是表达作者思想的基础,他们对代码质量的贡献母庸质疑. 2.变量 2.1.变量解包 1.什 ...

  9. python读取json格式文件大量数据,以及python字典和列表嵌套用法详解

    1.Python读取JSON报错:JSONDecodeError:Extra data:line 2 column 1 错误原因: JSON数据中数据存在多行,在读取数据时,不能够单单用open(), ...

最新文章

  1. 华为服务器型号查询,服务器设备型号查询
  2. poi实现excel数据导入数据库
  3. 【java】java 并发编程 LinkedBlockingDeque
  4. elementui树状菜单tree_Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)...
  5. python 两点曲线_全方位比较3种数据科学工具的比较:Python、R和SAS(附链接)
  6. Windows 2003中如何启动IIS6的GZIP压缩网页传输(补充)
  7. 《信号与系统学习笔记》—信号与系统(一)
  8. 控制 计算机某个程序自动开关,电脑自动开关机软件(示例代码)
  9. js中常遇到 切割截取字符串的几种方法
  10. Linux Vim 退出命令
  11. 安卓wifi连接 UID xxx does not have permission to update configuration “xxx“WPA_PSK
  12. [ Linux RK3568 ] 手动/自动调整千兆网口延时TX RX |CSDN创作打卡
  13. 反汇编工具OD(OllyDebug)
  14. 呷哺呷哺的中年危机与贺光启的囚徒困境
  15. 弹孔,血迹 等受击表现
  16. c语言 游程编码,简单的行程编码-C语言实现
  17. 安卓app对接网络验证系统一机一码源码脚本教程,一键注入网络验证工具
  18. 公钥(RSA)加密应用场景
  19. widget安卓桌面插件初步使用
  20. 郭敬明:定期关注大数据,指导《小时代》

热门文章

  1. AI让城市交通管理更“智慧”
  2. C/C++ 数字三角形
  3. html div表格代码,Table tr th td html表格标签
  4. Oracle 导出导入数据库
  5. 人脸识别人证比对技术SDK
  6. python算法面试题及答案,python面试题详细总结(附答案)
  7. xshell打开多个窗口_winscp使用教程xshell,winscp使用教程xshell,软件详情对比
  8. python asyncio原理_Asyncio 源码分析
  9. framework之深入surface系统
  10. PRD里面,一个完整的功能模块需求,应该怎么写?