解决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的文件操作方法汇总
Nov 10 Python
python遍历文件夹下所有excel文件
Jan 03 Python
利用python将pdf输出为txt的实例讲解
Apr 23 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
Dec 06 Python
Python后台开发Django会话控制的实现
Apr 15 Python
python实现统计文本中单词出现的频率详解
May 20 Python
python tkinter实现彩球碰撞屏保
Jul 30 Python
python多线程与多进程及其区别详解
Aug 08 Python
python实现从尾到头打印单链表操作示例
Feb 22 Python
python数据分析:关键字提取方式
Feb 24 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
python3代码输出嵌套式对象实例详解
Dec 03 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
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
node.js+express制作网页计算器
2016/01/17 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
django和flask哪个值得研究学习
2020/07/31 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
什么是servlet链?
2014/07/13 面试题
化工专业应届生求职信
2013/11/08 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
校庆筹备方案
2014/03/30 职场文书
2014年安全生产目标责任书
2014/07/23 职场文书
少先队活动总结
2014/08/29 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
母亲去世追悼词
2015/06/23 职场文书
《绝招》教学反思
2016/02/20 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js