简介Python的collections模块中defaultdict类型的用法


Posted in Python onJuly 07, 2016

defaultdict 主要用来需要对 value 做初始化的情形。对于字典来说,key 必须是 hashable,immutable,unique 的数据,而 value 可以是任意的数据类型。如果 value 是 list,dict 等数据类型,在使用之前必须初始化为空,有些情况需要把 value 初始化为特殊值,比如 0 或者 ‘‘。

from collections import defaultdict

person_by_age = defaultdict(list)
for person in persons:
  d[person.age].append(person.name)

defaultdict 和 dict 的使用方法一样,只有在初始化的时候必须传入一个 callable 的对象 x,当访问某个还不存在的 key 时,会把 value 自动设置成 x()。比如上例中,当第一次访问某个年龄的人 d[person.age] 就会变成 list(), 也就是 []。

当然也可以使用自己定义的 callable 对象,比如:

d = defaultdict(lambda: 0)
d["hello"] += 1     # 1
d["a"]         # 0

defaultdict 要比 dict.set_default 效率更高,使用起来也更直观和方便。

标准字典包括一个方法setdefault()来获取一个值,如果值不存在则建立一个默认值。defaultdict初始化容器是会让调用者提前指定默认值。

import collections
def default_factory():
  return 'default value'
d = collections.defaultdict(default_factory, foo = 'bar')
print 'd:', d
print 'foo =>', d['foo']
print 'var =>', d['bar']

只要所有键都有相同的默认值,就可以使用这个方法。
上面的结果是:

d: defaultdict(<function default_factory at 0x0201FAB0>, {'foo': 'bar'})
foo => bar
var => default value
Python 相关文章推荐
python调用shell的方法
Nov 20 Python
python中List的sort方法指南
Sep 01 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
python实现二叉树的遍历
Dec 11 Python
python 不以科学计数法输出的方法
Jul 16 Python
Pytorch之Variable的用法
Dec 31 Python
Python如何爬取51cto数据并存入MySQL
Aug 25 Python
python装饰器三种装饰模式的简单分析
Sep 04 Python
pycharm永久激活超详细教程
Oct 29 Python
Python os库常用操作代码汇总
Nov 03 Python
Python加载数据的5种不同方式(收藏)
Nov 13 Python
Python的collections模块中的OrderedDict有序字典
Jul 07 #Python
Python的collections模块中namedtuple结构使用示例
Jul 07 #Python
详解Python的collections模块中的deque双端队列结构
Jul 07 #Python
简单掌握Python的Collections模块中counter结构的用法
Jul 07 #Python
Python处理json字符串转化为字典的简单实现
Jul 07 #Python
全面了解python字符串和字典
Jul 07 #Python
对于Python中RawString的理解介绍
Jul 07 #Python
You might like
PHP写MySQL数据 实现代码
2009/06/15 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
javascript的函数
2007/01/31 Javascript
JavaScript Chart 插件整理
2010/06/18 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
element中的$confirm的使用
2020/04/26 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
python实现学生管理系统
2018/01/11 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
Python3中exp()函数用法分析
2019/02/19 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
初中同学聚会邀请函
2014/02/03 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
场地使用证明模板
2014/10/25 职场文书
优秀员工自荐书
2015/03/06 职场文书
家长会主持词开场白
2015/05/29 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python