python keyerror(0)
11年it研发经验,从一个会计转行为算法工程师,学过C#,c++,java,android,php,go,js,python,CNN神经网络,四千多篇博文,三千多篇原创,只为与你分享,共同成长,一起进步,关注我,给你分享更多干货知识!
本文讲得不是键盘的key,是python字典dict的key
当dict取值时,key在dict的key()中不存在,就会报错
python 在读取dict
的key
和value
时,如果key
不存在,就会触发KeyError
错误,如:
t = {'a': '1','b': '2','c': '3',
}
print(t['d'])
就会出现:
KeyError: 'd'
第一种解决方法
首先测试key是否存在,然后才进行下一步操作,如:
t = {'a': '1','b': '2','c': '3',
}
if 'd' in t:print(t['d'])
else:print('not exist')
会出现:
not exist
第二种解决方法
利用dict
内置的get(key[,default])
方法,如果key
存在,则返回其value
,否则返回default
;使用这个方法永远不会触发KeyError
,如:
t = {'a': '1','b': '2','c': '3',
}
print(t.get('d'))
会出现:
None
加上default
参数:
t = {'a': '1','b': '2','c': '3',
}
print(t.get('d', 'not exist'))
print(t)
会出现:
not exist
{'a': '1', 'c': '3', 'b': '2'}
第三种解决方法
利用dict
内置的setdefault(key[,default])
方法,如果key
存在,则返回其value
;否则插入此key
,其value
为default
,并返回default
;使用这个方法也永远不会触发KeyError
,如:
t = {'a': '1','b': '2','c': '3',
}
print(t.setdefault('d'))
print(t)
会出现:
None
{'b': '2', 'd': None, 'a': '1', 'c': '3'}
加上default
参数:
t = {'a': '1','b': '2','c': '3',
}
print(t.setdefault('d', 'not exist'))
print(t)
会出现:
not exist
{'c': '3', 'd': 'not exist', 'a': '1', 'b': '2'}
第四种解决方法
向类dict
增加__missing__()
方法,当key
不存在时,会转向__missing__()
方法处理,而不触发KeyError
,如:
t = {'a': '1','b': '2','c': '3',
}class Counter(dict):def __missing__(self, key):return None
c = Counter(t)
print(c['d'])
会出现:
None
更改return
值:
t = {'a': '1','b': '2','c': '3',
}class Counter(dict):def __missing__(self, key):return key
c = Counter(t)
print(c['d'])
print(c)
会出现:
d
{'c': '3', 'a': '1', 'b': '2'}
第五种解决方法
利用collections.defaultdict([default_factory[,...]])
对象,实际上这个是继承自dict
,而且实际也是用到的__missing__()
方法,其default_factory
参数就是向__missing__()
方法传递的,不过使用起来更加顺手:
如果default_factory
为None
,则与dict
无区别,会触发KeyError
错误,如:
import collections
t = {'a': '1','b': '2','c': '3',
}
t = collections.defaultdict(None, t)
print(t['d'])
会出现:
KeyError: 'd'
但如果真的想返回None
也不是没有办法:
import collections
t = {'a': '1','b': '2','c': '3',
}def handle():return None
t = collections.defaultdict(handle, t)
print(t['d'])
会出现:
None
如果default_factory
参数是某种数据类型,则会返回其默认值,如:
import collections
t = {'a': '1','b': '2','c': '3',
}
t = collections.defaultdict(int, t)
print(t['d'])
会出现:
0
又如:
import collections
t = {'a': '1','b': '2','c': '3',
}
t = collections.defaultdict(list, t)
print(t['d'])
会出现:
[]
注意:
如果dict
内又含有dict
,key
嵌套获取value
时,如果中间某个key
不存在,则上述方法均失效,一定会触发KeyError
:
import collections
t = {'a': '1','b': '2','c': '3',
}
t = collections.defaultdict(dict, t)
print(t['d']['y'])
会出现:
KeyError: 'y'
python keyerror(0)相关推荐
- Comprehensive Guide to build a Recommendation Engine from scratch (in Python) / 从0开始搭建推荐系统...
https://www.analyticsvidhya.com/blog/2018/06/comprehensive-guide-recommendation-engine-python/, 一篇详细 ...
- Python之父:Python 4.0可能不会来了
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨机器之心 编辑丨极市平台 导读 不要对 Python 4.0 ...
- Python 之父:Python 4.0 可能不会来了
来源:机器之心本文约1400字,建议阅读5分钟不要对 Python 4.0 抱有希望,可能不会有的. 不要对 Python 4.0 抱有希望,可能不会有的.--Python 之父 Guido van ...
- python KeyError: 4
KeyError: 4 还是因为dict字典没有这个key d={1:"sd",2:5}print(d[0]) 这个会报错: KeyError: 0 在读取
- python 3.0 print_Python 3.x 新特性及10大变化
python 3.x 起始版本是Python 3.0,目前的最新版本是 3.3.3 Python之父Guido van Rossum谈到了Python 3.0的构思: 一直以来,除非要打破向后兼容性, ...
- Python 之父:别等了,Python 4.0 可能不会来了
来自:机器之心 不要对 Python 4.0 抱有希望,可能不会有的.--Python 之父 Guido van Rossum 2020 年 1 月 1 日,Python 官方结束了对 Python ...
- python中0、1、True、False、if条件
总结: 无论是python还是C++,true=1,false=0 非零就是true,此说法只应用在判断条件中 1.python中0.1.True.False >>> print(T ...
- 为什么Python 4.0不会像Python 3.0
在提出向后不兼容的更改(这些更改不提供从当前合法的Python 3代码提供清晰的移植路径)时,使用python-ideas的新手偶尔会参考" Python 4000"的思想. 毕竟 ...
- 为什么python除法结果会有小数点0_为什么Python返回0进行简单的除法计算?
为什么Python返回0进行简单的除法计算? 内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用回答 (2) 关注 (0) 查看 (296)为什么这个简单的 ...
最新文章
- pwdencrypt,pwdcompare
- Linux操作系统Ubuntu部署Oracle篇
- MyBatis-02 MyBatis XML方式概述及配置步骤
- 开始复习下sql,常用SQL语句示例(一)
- linux系统网络对时,Linux系统网络优化【转】
- 利用延迟关联或者子查询优化超多分页场景
- photoshop cs5快捷键的用法总结
- C语言学习笔记---字符读取函数scanf()、gets()、fgets()
- 在Mac系统下架设WiFi热点,对比Win7
- 《ES6标准入门》学习笔记
- enlightenment提权的工具
- 从Logistic Regression 到 Neural Network
- python嵌套函数return_python嵌套函数
- 怎么利用Excel实现随机取样
- 老师必备的数学几何绘图软件,赶紧收藏!
- 网络丢包的四大原因和修复方法
- 如何制定一份测试工程师年度计划
- 猫眼CEO郑志昊:为什么说产品思维已“死”?
- box2d的角色邹形
- SQL不同服务器数据库之间的数据操作整理(完整版)(转)
热门文章
- 层次聚类多维度matlab实现_第34集 python机器学习:凝聚聚类
- 算法 求一个数组的最长递减子序列 C
- 如何放出Linux内核中的链表大招
- ubuntu16.04开机卡死解决方案
- php 析构不执行,PHP析构方法 __destruct() 不触发的两个解决办法
- 杭州java班学费多少_杭州学java费用多少
- python从入门到项目实战李兴华网盘_贺胜军Python轻松入门到项目实战【经典完整版】...
- Java -cp 使用
- 每日一皮:这设计师真有才...
- 为什么要强制弃坑Fastjson而主推Jackson?