python库整理:collections.defaultdict
Python中通过Key访问字典,当Key不存在时,会引发‘KeyError'异常。(之前dict里面的解决方法是使用get函数设置默认值)
dit={'yellow': 3, 'blue': 4, 'red': 1}
dit['green']
#KeyError: 'green'dit.get('green',10)
#第二个参数为,如果值不存在,返回的默认值
#10
我们也可以使用collections类中的defaultdict()方法来为字典提供默认值。该函数返回一个类似字典的对象。
defaultdict是Python内建字典类(dict)的一个子类,它重写了方法_missing_(key),增加了一个可写的实例变量default_factory。
实例变量default_factory被missing()方法使用,如果该变量存在,则用以初始化构造器,如果没有,则为None。其它的功能和dict一样。
我们先看一个例子:
s=[('yellow',1),('blue',2),('yellow',3),('blue',4),('red',1)]
我们希望把s中的信息整理成字典,每个颜色的数字放在这个颜色对应的列表中
以下两种方法都是不行的。新的值会覆盖掉老的值
dict(s)
#{'yellow': 3, 'blue': 4, 'red': 1}d2=dict()
for k,v in s:d2[k]=v
d2
#{'yellow': 3, 'blue': 4, 'red': 1}
如果我们不用defaultdict的话,可以用下面两种方法来实现
d3=dict()
for k,v in s:if(k in d3):d3[k].append(v)else:d3[k]=[v]
d3
{'yellow': [1, 3], 'blue': [2, 4], 'red': [1]}d4=dict()
'''
setdefault和get一样,是返回字典的键值,
不过和get不一样的是,在字典中不包含指定的项的时候,
添加指定的键值对(如果不指定键值的话,默认为None)
'''
for k,v in s:d4.setdefault(k,[]).append(v)
d4
#{'yellow': [1, 3], 'blue': [2, 4], 'red': [1]}
使用defaultdict
d=defaultdict(list)
#参数为defaultdict属性的类型for k,v in s:d[k].append(v)
'''
当字典中没有的键第一次出现时,default_factory自动为其返回一个空列表
list.append()会将值添加进新列表;
再次遇到相同的键时,list.append()将其它值再添加进该列表。
'''
a=d.items()print(d)
#defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})
print(a)
#dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])
print(dict(a))
#{'yellow': [1, 3], 'blue': [2, 4], 'red': [1]}
如果defaultdict的参数是int的话,那么就和在setdefault里面设置默认参数为0是一样的
s = 'Chinese'
d = defaultdict(int)
for k in s:d[k] += 1
d
#defaultdict(int, {'C': 1, 'h': 1, 'i': 1, 'n': 1, 'e': 2, 's': 1})d1 = dict()
for k in s:d1.setdefault(k,0)+=1
#这样就是错的,SyntaxError: can't assign to function call
python库整理:collections.defaultdict相关推荐
- python库整理目录
zip与zip(*)_刘文巾的博客-CSDN博客 python函数整理_刘文巾的博客-CSDN博客 python笔记:正则表达式_刘文巾的博客-CSDN博客 python笔记:深拷贝与浅拷贝_刘文巾 ...
- 吐血整理一个月——终于把所有Python库整理齐了.....
大家好! 最近天天熬夜,头发都掉完了, 就为了把Python所有的库完全整理一遍, 希望对大家有所帮助! 一.数据处理 (https://jq.qq.com/?_wv=1027&k=2Q3YT ...
- python xlsx 样式 谷歌开源 样式_连续加班一周最终把所有的Python库整理出来了,愿各位早日学会Py-站长资讯中心...
MySQLdb,成熟的[MySQL]数据库模块, Baresql,SQL数据库包 ZODB,Python本地对象数据库.一个K-V对象图数据库. pickledb,简单和轻量级的K-V键值存储. Ti ...
- python库整理: Collections.Counter
Counter目的是用来跟踪值出现的次数. 它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value. #导入库: from collections import Co ...
- python 库整理: collections.namedtuple
namedtuple创建一个和tuple类似的对象,而且对象拥有可访问的属性. 1 nametuple的创建 User1 = namedtuple('User_name', ['name', 'sex ...
- python 库整理:Timm(1)
1 Timm介绍 `timm` 是一个深度学习库,是 SOTA 计算机视觉模型.层.实用程序.优化器.调度器.数据加载器.增强以及具有再现 ImageNet 训练结果能力的训练/验证脚本的集合. 2 ...
- python 库整理_自己整理的PYTHON库
1.操作Excel 1)Pylightxl 地址:https://pypi.org/project/pylightxl 文档:https://pylightxl.readthedocs.io/en/l ...
- python 库整理:toolz.curried (整理中)
1 toolz.curried.first 一个sequence的第一个元素 from toolz.curried import * lst=[[1,2],[3,4]] first(lst) #[1, ...
- python库整理:numpy 集合操作
1 并集--union1d import numpy as np arr1 = np.array([1, 2, 3, 4]) arr2 = np.array([3, 4, 5, 6])newarr = ...
最新文章
- linux mysql忘记root密码
- MyBatis Generator 详解
- PMCAFF微课堂视频合集 | O2O产品的颠覆与布局
- 关注CIO:IT运维如何实现“向管理要效益”(转载)
- mysql node null_node-mysql中防止SQL注入的方法总结
- thinkphp+extjs +jquery CMS管理系统
- JavaScript从入门到放弃 - (一)构造函数和原型
- pythonyaml参数_使用python检查yaml配置文件是否符合要求
- 计算机网络中的基本概念
- BZOJ1022 [SHOI2008]小约翰的游戏John (博弈论)
- 转载--柯尔莫哥洛夫
- DirectX12(D3D12)基础教程(十)——DXR(DirectX Raytracing)基础教程(上)
- 输入1-9显示壹贰叁..玖
- 约束优化方法_1_——Zoutendijk可行方向法
- PVE下虚拟机安装UNRAID
- 解压rar/zip工具类
- 微信js 大转盘抽奖
- 常用的http状态码 状态码大全 常见的状态码
- 甲骨文oracle测试面试记录
- 关于element-ui的输入框限制只能输入数字的问题