collections的defaultdict使用
defaultdict
defaultdict 是 dict 类型的子类,正如其名,初始化时,可以给key指定默认值。
如果是普通的dict对象,访问一个不存在的key时,会报错:
dict1 = dict()
print(dict1['a'])
KeyError: 'a'
而使用defaultdict,dict中不存在key ,会输出默认的初始值,例如,设置默认空列表dict,返回也是[]:
from collections import defaultdictres1 = defaultdict(list)
print(res1['a']) # []
print(res1.get('a')) # []
print(res1.get('a', 'hello world 1')) # []
默认给一个0的dict:
from collections import defaultdictres2 = defaultdict(int)
print(res2['a']) # 0
print(res2.get('a')) # 0
print(res2.get('a', 'hello world 2')) # 0
defaultdict方法接收的参数是一个可调用对象,可以简单理解为一个函数对象,我们知道python中一切皆对象,int、list本来以上一个函数对象,这里如果想要默认值不是0,而是999,该怎么处理呢?
使用匿名函数,指定defaultdict默认值:
from collections import defaultdictres3 = defaultdict(lambda: 999)
print(res3['b']) # 999
print(res3.get('b')) # 999
print(res3.get('b', 0)) # 999
当然也可以使用自定义函数,指定defaultdict默认值:
from collections import defaultdictdef get_default():return 'Hello World !'res4 = defaultdict(get_default)
print(res4['b']) # Hello World !
print(res4.get('b')) # Hello World !
print(res4.get('b', 0)) # Hello World !
- 关于defaultdict的一些应用场景:
场景一:我们经常想要将一个列表中的数据进行整合,比如这种:
initial_data = [('class1', '张三'), ('class2', '李四'), ('class1', '王五'),('class3', '赵六'), ('class3', '李刚弹'), ('class2', '王大炮'),('class1', '王大锤'), ('class2', '李二狗'), ('class1', '佚名')]
变成:
finally_data = {'class1': ['张三', '王五', '王大锤', '佚名'],'class2': ['李四', '王大炮', '李二狗', ],'class3': ['赵六', '李刚弹']
}
如果自己实现的话可能会用for循环依次判断,又或者使用到setdefault方法也可以。这里如果使用defaultdict方法算是一种比较优雅的解决:
res5 = defaultdict(list)
for k, v in initial_data:res5[k].append(v)print(res5 == finally_data) # True
}
附:使用setdefault也可以优雅的解决
res6 = {}
for k, v in initial_data:res6.setdefault(k, []).append(v)print(res6 == finally_data) # True
参考:
https://www.cnblogs.com/thsk/p/8404425.html
collections的defaultdict使用相关推荐
- collections之defaultdict
最近在学习collections库,做一点笔记. 1.基础介绍 统计一个列表中元素出现的次数 #encoding:utf-8from collections import defaultdictuse ...
- 构造函数= default;_Python Collections之defaultdict 和 default_factory关系
容器(collections)是Python附带一个模块,它包含许多容器数据类型,今天先拿出defaultdict来说. dict在python中是非常常见的一种数据类型. colours = ((' ...
- python中的defaultdict_简介Python的collections模块中defaultdict类型的用法
defaultdict 主要用来需要对 value 做初始化的情形.对于字典来说,key 必须是 hashable,immutable,unique 的数据,而 value 可以是任意的数据类型.如果 ...
- collections模块之defaultdict
初识defaultdict 之前在使用字典的时候, 用的比较随意, 只是简单的使用dict. 然而这样在使用不存在的key的时候发生KeyError这样的一个报错, 这时候就该defaultdict登 ...
- python defaultdict 类属性_Python collections.defaultdict模块用法详解
Python中通过Key访问字典,当Key不存在时,会引发'KeyError'异常.为了避免这种情况的发生,可以使用collections类中的defaultdict()方法来为字典提供默认值. 语法 ...
- python︱ collections模块(namedtuple/defaultdict/OrderedDict等)
collections有的功能: ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList', 'UserString',\'Count ...
- Collections中Counter函数,namedtuple函数,defaultdict函数的使用
#python中collections工具包的一点使用 #组织特征数据用namedtuple函数 from collections import namedtuple Features = named ...
- collections.defaultdict
python 简单数据分析 collections. 这个模块提供容器相关的更高性能的数据类型,它们提供比通用容器 dict, list, set 和tuple更强大的功能. **collection ...
- 关于python中的dict和defaultdict
dict 在Python中如果访问字典中不存在的键,会引发KeyError异常,所以一般当我们比如统计一句话的词频时候,我们总是使用这样的处理方式: strings = ('puppy', 'kitt ...
- python3 collections模块_Python3之内建模块collections
collections是python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不可变集合,例如,一个点的二维坐标可以表示成 >>> ...
最新文章
- sass的继承,混合宏,占位符的用法总结
- windows1064安装oracle,在Windows 10系统下安装Oracle 11g数据库
- linux创建sftp用户并指定访问目录,linux – 创建SFTP用户只能访问一个目录.
- centos7设置时间为日本东京时间
- 13.8.可视化虚拟机工具--Jconsole内存监控、13.9.可视化虚拟机工具--Jconsole线程监控、13.10.死锁原理以及可视化虚拟机工具--Jconsole线程
- java自动关闭吗_JAVA问题--浏览器老是自动关闭
- 洛谷P6097:【模板】子集卷积(FWT)
- android上运行java命令,Java exec()不在android上运行busybox命令
- 完全卸载gitlab
- bitcount java_Java Long bitCount()方法
- Null + Anything = null, 好奇怪的设定啊
- vue 使用了浏览器的刷新之后报错_98、解决vue-cli3项目运行时sockjs报错问题
- PyCharm中的一些设置
- 局域网ip扫描工具_IP Scanner局域网IP扫描工具
- 使用谷歌API将任意语言翻译成英文
- 骗子网站--正规网赚系统--www.j9m2.com--诈骗网站
- 从Bitly构建分布式系统中吸取的教训
- RFID智能档案管理系统 设计方案
- 为什么空集是集合的子集_空集为什么是任何集合的子集和非任何空集的真子集呢...
- android4.1不支持微信,华为EMUI 4.1(android6.0)手机能否安装微信小程序?