python:defaultdict 对象

  • defaultdict 例子

class collections.defaultdict(default_factory=None, /[, …])
返回一个新的类似字典的对象。 defaultdict 是内置 dict 类的子类。 它重载了一个方法并添加了一个可写的实例变量。 其余的功能与 dict 类相同因而不在此文档中写明。

本对象包含一个名为 default_factory 的属性,构造时,第一个参数用于为该属性提供初始值,默认为 None。所有其他参数(包括关键字参数)都相当于传递给 dict 的构造函数。

defaultdict 对象除了支持标准 dict 的操作,还支持以下方法作为扩展:

missing(key)
如果 default_factory 属性为 None,则调用本方法会抛出 KeyError 异常,附带参数 key。

如果 default_factory 不为 None,则它会被(不带参数地)调用来为 key 提供一个默认值,这个值和 key 作为一对键值对被插入到字典中,并作为本方法的返回值返回。

如果调用 default_factory 时抛出了异常,这个异常会原封不动地向外层传递。

在无法找到所需键值时,本方法会被 dict 中的 getitem() 方法调用。无论本方法返回了值还是抛出了异常,都会被 getitem() 传递。

注意,missing() 不会 被 getitem() 以外的其他方法调用。意味着 get() 会像正常的 dict 那样返回 None,而不是使用 default_factory。

defaultdict 对象支持以下实例变量:

default_factory
本属性由 missing() 方法来调用。如果构造对象时提供了第一个参数,则本属性会被初始化成那个参数,如果未提供第一个参数,则本属性为 None。

在 3.9 版更改: 增加了合并 (|) 与更新 (|=) 运算符,相关说明见 PEP 584。

defaultdict 例子

使用 list 作为 default_factory,很轻松地将(键-值对组成的)序列转换为(键-列表组成的)字典:

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

当每个键第一次遇见时,它还没有在字典里面,所以自动创建该条目,即调用 default_factory 方法,返回一个空的 list。 list.append() 操作添加值到这个新的列表里。当再次存取该键时,就正常操作,list.append() 添加另一个值到列表中。这个计数比它的等价方法 dict.setdefault() 要快速和简单:

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

设置 default_factory 为 int,使 defaultdict 用于计数(类似其他语言中的 bag 或 multiset):

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

当一个字母首次遇到时,它会查询失败,则 default_factory 会调用 int() 来提供一个整数 0 作为默认值。后续的自增操作建立起对每个字母的计数。

函数 int() 总是返回 0,这是常数函数的特殊情况。一个更快和灵活的方法是使用 lambda 函数,可以提供任何常量值(不只是0):

>>>
def constant_factory(value):return lambda: value
d = defaultdict(constant_factory('<missing>'))
d.update(name='John', action='ran')
'%(name)s %(action)s to %(object)s' % d
'John ran to <missing>'

设置 default_factory 为 set 使 defaultdict 用于构建 set 集合:

>>>
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)sorted(d.items())
[('blue', {2, 4}), ('red', {1, 3})]

python:defaultdict 对象相关推荐

  1. 完全理解 Python 迭代对象、迭代器、生成器(转)

    完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...

  2. python类对象和实例对象

    类对象支持两种操作:属性引用和实例化. 属性引用 使用 Python 中所有属性引用所使用的标准语法: obj.name. 有效的属性名称是类对象被创建时存在于类命名空间中的所有名称. 因此,如果类定 ...

  3. python哪些是可变对象_什么是Python可变对象和不可变对象

    什么是Python可变对象和不可变对象 发布时间:2020-07-22 09:59:15 来源:亿速云 阅读:60 作者:Leah 这篇文章运用简单易懂的例子给大家介绍什么是Python可变对象和不可 ...

  4. python mmap对象

    ----使用内存映射的原因 为了随机访问文件的内容,使用mmap将文件映射到内存中是一个高效和优雅的方法.例如,无需打开一个文件并执行大量的seek(),read(),write()调用,只需要简单的 ...

  5. python和对象复习_面向对象阶段复习

    面向对象阶段复习 一.类,对象,属性方法调用 class 类名(父类1,父类2): 静态属性 = '' # 静态属性,也叫类属性 def __init__(self): # 初始化方法 self.na ...

  6. 弱引用的用途:在底层C++对象被上层python脚本对象使用时(转)

    在使用python脚本和底层C++对象进行交互的过程中发生了一个问题:由于底层C++对象的创建和删除决定权由底层决定,当底层决定删除这些对象而上层仍然在"强引用"这些对象的时候,就 ...

  7. python 视图对象_python web框架篇:views视图函数

    Django请求的生命周期是怎样的? 简单地说,通过URL对应关系匹配 ->找到对应的函数(或者类)->返回字符串(或者读取Html之后返回渲染的字符串) 解剖起来如下: 1. 当用户在浏 ...

  8. python defaultdict 简单了解

    首先看官方文档doc 总结: 使用一个factory函数作为defaultdict对象的参数 In [1]: from collections import defaultdictIn [2]: d ...

  9. python遇到对象_### python面对对象小汇总 #####

    python面对对象小汇总 类的起名规则 # 所有的类名要求首字母大写,多个单词使用驼峰式命名法 如 ValueError # 类中方法: 普通方法 类方法 静态方法 魔术方法 class Phone ...

最新文章

  1. 难点电路详解之负反馈放大器电路(1)
  2. 从零开始一步一步搭建Ubuntu Server服务器、修改数据源、安装Docker、配置镜像加速器、Compose部署Gitlab服务
  3. 【ARM】Tiny4412裸板编程之MMU(段1M)
  4. 关于优酷开放SDK之setOnVideoSizeChangedListener
  5. redis 数据结构
  6. 理解T-SQL: 脚本和批处理
  7. linux重定向到文件permission denied
  8. 用Python做一个简单的翻译工具
  9. Hive中分组取前N个值
  10. spring实现mqtt服务端_SpringBoot--实战开发--MQTT消息推送(六十)
  11. js 原型链的介绍
  12. 二叉排序树求每个结点平衡因子程序
  13. 【ArcGIS微课1000例】0027:ArcGIS属性表(dbf)转Excel的4中方法
  14. matlab求t分布的p值,在R中如何求给定分布和统计量的p-value
  15. 学籍管理的c语言程序代码,学生学籍管理系统-C语言程序代码
  16. 服务器temp文件夹文件都能清理吗,Temp文件夹是什么?Windows中Temp文件夹下内容可以随意删除吗?...
  17. 苹果Mac电脑文件夹路径怎么看?“访达”也能显示文件路径
  18. 快速了解idm+油猴插件配合,极速下载(适用于全网)
  19. 企业邮箱是什么及与个人邮箱的区别
  20. 社会主义市场经济的运作机制

热门文章

  1. 土木工程材料——混凝土
  2. HTML 入门基础教程
  3. kaggle操作入门
  4. win7 从网络访问此计算机',在里面把guest用户组添加上,大白菜修复win7系统没有权限访问网络资源的办法...
  5. ppt太大无法上传怎么压缩变小?
  6. java计算机毕业设计科技项目在线评审系统MyBatis+系统+LW文档+源码+调试部署
  7. python selenium+Firefox 模拟浏览器操作
  8. 优秀开源项目(持续更新)
  9. echarts学习笔记1
  10. 4个问题带你了解用户画像