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相关推荐

  1. python库整理目录

     zip与zip(*)_刘文巾的博客-CSDN博客 python函数整理_刘文巾的博客-CSDN博客 python笔记:正则表达式_刘文巾的博客-CSDN博客 python笔记:深拷贝与浅拷贝_刘文巾 ...

  2. 吐血整理一个月——终于把所有Python库整理齐了.....

    大家好! 最近天天熬夜,头发都掉完了, 就为了把Python所有的库完全整理一遍, 希望对大家有所帮助! 一.数据处理 (https://jq.qq.com/?_wv=1027&k=2Q3YT ...

  3. python xlsx 样式 谷歌开源 样式_连续加班一周最终把所有的Python库整理出来了,愿各位早日学会Py-站长资讯中心...

    MySQLdb,成熟的[MySQL]数据库模块, Baresql,SQL数据库包 ZODB,Python本地对象数据库.一个K-V对象图数据库. pickledb,简单和轻量级的K-V键值存储. Ti ...

  4. python库整理: Collections.Counter

    Counter目的是用来跟踪值出现的次数. 它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value. #导入库: from collections import Co ...

  5. python 库整理: collections.namedtuple

    namedtuple创建一个和tuple类似的对象,而且对象拥有可访问的属性. 1 nametuple的创建 User1 = namedtuple('User_name', ['name', 'sex ...

  6. python 库整理:Timm(1)

    1 Timm介绍 `timm` 是一个深度学习库,是 SOTA 计算机视觉模型.层.实用程序.优化器.调度器.数据加载器.增强以及具有再现 ImageNet 训练结果能力的训练/验证脚本的集合. 2 ...

  7. python 库整理_自己整理的PYTHON库

    1.操作Excel 1)Pylightxl 地址:https://pypi.org/project/pylightxl 文档:https://pylightxl.readthedocs.io/en/l ...

  8. python 库整理:toolz.curried (整理中)

    1 toolz.curried.first 一个sequence的第一个元素 from toolz.curried import * lst=[[1,2],[3,4]] first(lst) #[1, ...

  9. python库整理:numpy 集合操作

    1 并集--union1d import numpy as np arr1 = np.array([1, 2, 3, 4]) arr2 = np.array([3, 4, 5, 6])newarr = ...

最新文章

  1. linux mysql忘记root密码
  2. MyBatis Generator 详解
  3. PMCAFF微课堂视频合集 | O2O产品的颠覆与布局
  4. 关注CIO:IT运维如何实现“向管理要效益”(转载)
  5. mysql node null_node-mysql中防止SQL注入的方法总结
  6. thinkphp+extjs +jquery CMS管理系统
  7. JavaScript从入门到放弃 - (一)构造函数和原型
  8. pythonyaml参数_使用python检查yaml配置文件是否符合要求
  9. 计算机网络中的基本概念
  10. BZOJ1022 [SHOI2008]小约翰的游戏John (博弈论)
  11. 转载--柯尔莫哥洛夫
  12. DirectX12(D3D12)基础教程(十)——DXR(DirectX Raytracing)基础教程(上)
  13. 输入1-9显示壹贰叁..玖
  14. 约束优化方法_1_——Zoutendijk可行方向法
  15. PVE下虚拟机安装UNRAID
  16. 解压rar/zip工具类
  17. 微信js 大转盘抽奖
  18. 常用的http状态码 状态码大全 常见的状态码
  19. 甲骨文oracle测试面试记录
  20. 关于element-ui的输入框限制只能输入数字的问题

热门文章

  1. 高考查分数微信就能搞定
  2. docker深入1-导入导出images和container的方式
  3. 【流量劫持】躲避 HSTS 的 HTTPS 劫持
  4. Eclipse更改系统主题
  5. orcal 数据库密码修改(表密码,sys密码,system密码)
  6. Ubuntu下搭建sun-jdk和Maven2
  7. PAT甲级1092 To Buy or Not to Buy :[C++题解]哈希表
  8. 数组模拟单链表acwing826. 单链表
  9. php服务为什么开不了,php怎么打不开
  10. listen函数介绍