解决Python字典查找报Keyerror的问题


Posted in Python onMay 26, 2021

Python的字典一般都直接查找key ,比如

dict={'a':1,'b':2,'c':3}
print(dict['a'])

但是如果在查找的key不存在的时候就会报:KeyError:

比如你要查看print(dict['d'])

由于这个时候dict里面并没有这个key ,所以就会直接报错,那么这个时候其实python给我们提供了一种很棒的解决方法,那就是用

setdefault,用法如下: dict.setdefault(key,[这里设置如果不存在想将值设置为啥,默认为None])

解决Python字典查找报Keyerror的问题

那么这里我们可以用此方法解决:

print(dict.setdefault('d',0))

然后就没有问题啦,注意下就是setdefault是如果要想往dict中添加新值的时候就使用此函数,如果只是单纯想要做查找,碰到key不存在或者希望在通过这个键读取值的时候能得到一个默认值,那么建议用defaultdict

首先先介绍下这个所谓的defaultdict,来自于collections模块,collections是个集合模块,defaultdict(function_factory)构建的是一个类似dictionary的对象,其中key的值,自行确定赋值,但是value的类型是function_factory的类实例,而且具有默认值.这里还引入了一个概念就是工厂函数,python的工厂函数就是指那些内建函数都是类对象,当你调用他们时,实际上是创建了一个类实例。

比如int(),str(),set()等,这里我们看下例子:

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

我们最后得到的输出结果如下:

解决Python字典查找报Keyerror的问题

我们可以看到,当d中没有对应的key时最后返回的是个空列表,那是因为我们在设置defaultdict的时候用的工厂函数是list,而list的默认值是空列表,下面我们在看下如果工厂函数是set()会是什么样子

import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = collections.defaultdict(set)
for k, v in s:
    d[k].add(v)
print(d['yellow'])
print(d['white'])
print(list(d.items()))

结果输出如下:

解决Python字典查找报Keyerror的问题

补充:python报错出现 KeyError: 'longitude'

python报错出现 KeyError: ‘longitude'

报错界面如下图所示:

解决Python字典查找报Keyerror的问题

我在网上寻找了方法,确实找到一个解决方案:对你可能有用的解决方案一

但是我试了还是没用,于是,当我定睛一看,发现竟又是由于俺的粗心造成的。啊,如下图,按在longitude前面少了个逗号,

如下图:

解决Python字典查找报Keyerror的问题

所以这个问题就解决啦,好,我继续我的课程设计了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python获取外网ip地址的方法总结
Jul 02 Python
python读取oracle函数返回值
Jul 18 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
python将秒数转化为时间格式的实例
Sep 16 Python
python读取各种文件数据方法解析
Dec 29 Python
在服务器上安装python3.8.2环境的教程详解
Apr 26 Python
Python实现初始化不同的变量类型为空值
Jun 02 Python
Python decimal模块使用方法详解
Jun 08 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
深入探讨opencv图像矫正算法实战
May 21 Python
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
tensorflow中的数据类型dtype用法说明
May 26 #Python
详解Python魔法方法之描述符类
May 26 #Python
使用tensorflow 实现反向传播求导
python基础学习之递归函数知识总结
TensorFlow的自动求导原理分析
Django分页器的用法你都了解吗
May 26 #Python
You might like
discuz安全提问算法
2007/06/06 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
php获取url参数方法总结
2014/11/13 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
JavaScript中的私有成员
2006/09/18 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
Python中文编码那些事
2014/06/25 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
详解Python字典小结
2018/10/20 Python
python之消除前缀重命名的方法
2018/10/21 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
华润集团网上药店:健一网
2016/09/19 全球购物
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
个人委托书范文
2015/01/28 职场文书