Python collections.defaultdict模块用法详解


Posted in Python onJune 18, 2020

Python中通过Key访问字典,当Key不存在时,会引发‘KeyError'异常。为了避免这种情况的发生,可以使用collections类中的defaultdict()方法来为字典提供默认值。

语法格式:

collections.defaultdict([default_factory[, …]])
class defaultdict(Dict[_KT, _VT], Generic[_KT, _VT]):
default_factory: Callable[[], _VT]

该函数返回一个类似字典的对象。defaultdict是Python内建字典类(dict)的一个子类,它重写了方法_missing_(key),增加了一个可写的实例变量default_factory,实例变量default_factory被missing()方法使用,如果该变量存在,则用以初始化构造器,如果没有,则为None。其它的功能和dict一样。

第一个参数为default_factory属性提供初始值,默认为None;其余参数包括关键字参数(keyword arguments)的用法,和dict构造器用法一样。

1.使用list作第一个参数,可以很容易将键-值对序列转换为列表字典。

from collections import defaultdict
s=[('yellow',1),('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d=defaultdict(list)
for k, v in s:
  d[k].append(v)
a=sorted(d.items())
print d
print a

'''
defaultdict(<type 'list'>, {'blue': [2, 4], 'red': [1], 'yellow': [1, 3]})
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

'''

当字典中没有的键第一次出现时,default_factory自动为其返回一个空列表,list.append()会将值添加进新列表;再次遇到相同的键时,list.append()将其它值再添加进该列表。

这种方法比使用dict.setdefault()更为便捷,dict.setdefault()也可以实现相同的功能。

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d={}
for k, v in s:
  d.setdefault(k,[]).append(v)
print d
a=sorted(d.items())
print a

'''
{'blue': [2, 4], 'red': [1], 'yellow': [1, 3]}
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
'''

2.defaultdict还可以被用来计数,将default_factory设为int即可。

s = 'mississippi'
d = defaultdict(int)
for k in s:
  d[k] += 1
print d
a=sorted(d.items())
print a
'''
defaultdict(<type 'int'>, {'i': 4, 'p': 2, 's': 4, 'm': 1})
[('i', 4), ('m', 1), ('p', 2), ('s', 4)]
'''

字符串中的字母第一次出现时,字典中没有该字母,default_factory函数调用int()为其提供一个默认值0,加法操作将计算出每个字母出现的次数。

函数int()是常值函数的一种特例,总是返回0。使用匿名函数(lambda function)可以更快、更灵活的创建常值函数,返回包括0在内的任意常数值。

def constant_factory(value):
  return lambda: value
d = defaultdict(constant_factory('<missing>'))
print d
d.update(name='John', action='ran')
print d
print '%(name)s %(action)s to %(object)s' % d 
'''
defaultdict(<function <lambda> at 0x10c180668>, {})
defaultdict(<function <lambda> at 0x10c180668>, {'action': 'ran', 'name': 'John'})
John ran to <missing>
'''

3.default_factory设为set时,可以用defaultdict建立集合字典(a dictionary of sets)

s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
d = defaultdict(set)
for k, v in s:
  d[k].add(v)
print d
a=sorted(d.items())
print a
'''
defaultdict(<type 'set'>, {'blue': set([2, 4]), 'red': set([1, 3])})
[('blue', set([2, 4])), ('red', set([1, 3]))]
'''

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python多进程编程技术实例分析
Sep 16 Python
通过C++学习Python
Jan 20 Python
详解Python中的序列化与反序列化的使用
Jun 30 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
python执行精确的小数计算方法
Jan 21 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
python实现AES加密解密
Mar 28 Python
Django 大文件下载实现过程解析
Aug 01 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
Python环境搭建过程从安装到Hello World
Feb 05 Python
教你怎么用Python实现多路径迷宫
Apr 29 Python
python实现批量命名照片
Jun 18 #Python
pandas之分组groupby()的使用整理与总结
Jun 18 #Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 #Python
Python调用shell cmd方法代码示例解析
Jun 18 #Python
Python如何自动获取目标网站最新通知
Jun 18 #Python
浅谈keras使用中val_acc和acc值不同步的思考
Jun 18 #Python
python实现在线翻译
Jun 18 #Python
You might like
DedeCms模板安装/制作概述
2007/03/11 PHP
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
php常用的安全过滤函数集锦
2014/10/09 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
一个简单至极的PHP缓存类代码
2015/10/23 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
DOM精简教程
2006/10/03 Javascript
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
JS继承用法实例分析
2015/02/05 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Python实现的RSS阅读器实例
2015/07/25 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
Python目录和文件处理总结详解
2019/09/02 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
销售行政专员岗位职责
2014/06/10 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
Python机器学习之逻辑回归
2021/05/11 Python