Python学习小技巧之利用字典的默认行为


Posted in Python onMay 20, 2017

本文介绍的是关于Python利用字典的默认行为的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:

典型代码1:

from collections import defaultdict 
 
 
if __name__ == '__main__': 
 data = defaultdict(int) 
 data[0] += 1 
 print(data)

输出1:

defaultdict(<type 'int'>, {0: 1})

典型代码2:

if __name__ == '__main__': 
 data = {'k': 1} 
 data.setdefault('k', 100) 
 data.setdefault('k1', -100) 
 print(data)

输出2:

{'k': 1, 'k1': -100}

应用场景:

典型代码1的应用场景:

在写一些统计代码的时候,总是需要统计一些key的个数,用一个字典来存储计数的结果,如果使用的是经典字典,那么我们每次都需要人工写代码来判断对应的key是否存在,如果不存在还需要将其存入这个字典中,再将其初始化为0;而利用defaultdict数据类型,我们就可以直接指定一个工厂函数来为我们生产默认值,典型代码1中使用的是内置的int函数,当然也可以是lambda表达式定义的匿名函数。

典型代码2的应用场景:

对于一个字典,如果我们只想保留每个key被第一次指定的值,如果用传统的方法data['k']='v'的话,我们需要每次都要判断相应的key是否已经存在于字典中,然后才能决定是否能够设置这个key的值;二利用dict的setdefault方法,我们可以避免这次判断,以更加简洁的方式实现这个功能。

带来的好处:

      1. 场景2中的setdefault方法,在Python解释器的实现中经过优化,一般情况下要比自己写的同样功能的Python代码执行效率要高

      2. 这两种默认情形,都能够使代码更加紧凑,逻辑上,读代码时理解起来也更高效

其它说明:

      1. defaultdict类型,可以接收很多的类型,内置的list, set, dict都可以直接使用,使用lambda匿名函数,可以使用自己定义的类型

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python中 chr unichr ord函数的实例详解
Aug 06 Python
python中实现k-means聚类算法详解
Nov 11 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
python PyTorch预训练示例
Feb 11 Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 Python
浅谈python 中类属性共享的问题
Jul 02 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
python小项目之五子棋游戏
Dec 26 Python
python时间与Unix时间戳相互转换方法详解
Feb 13 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
Feb 03 Python
Python学习小技巧之列表项的排序
May 20 #Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 #Python
Python yield 使用方法浅析
May 20 #Python
Python学习小技巧之列表项的拼接
May 20 #Python
Django验证码的生成与使用示例
May 20 #Python
Linux RedHat下安装Python2.7开发环境
May 20 #Python
深入理解Python中的内置常量
May 20 #Python
You might like
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
让PHP以ROOT权限执行系统命令的方法
2011/02/10 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
Python简单操作sqlite3的方法示例
2017/03/22 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
Python如何发布程序的详细教程
2018/10/09 Python
Mac安装python3的方法步骤
2019/08/09 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
手术室护士自我鉴定
2013/10/14 职场文书
会计顶岗实习心得
2014/01/25 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
讨论nginx location 顺序问题
2022/05/30 Servers