Python字典查找key不存在报错时的解决方法:setdefault
解决Python字典查找报Keyerror的问题

2021 年 05 月 26 日 15 时 43 分 58 分进行了更新,更新的作者是幸运的 Alina。
这篇文章主要是介绍如何解决 Python 字典查找时报 Keyerror 的问题,它具有较高的参考价值,希望能对大家有所助益。倘若存在错误或者未考虑周全之处,恳请不吝给予指教。
Python的字典一般都直接查找key ,比如
dict={'a':1,'b':2,'c':3}
print(dict['a'])
但是当查找的 key 不存在时,就会出现报错:KeyError:
比如你要查看print(dict['d'])
这个时候 dict 中没有这个 key ,所以会直接报错。而此时 Python 给我们提供了一种很棒的解决方法,即使用
- 还可以设置一个值,如果 key 在字典中不存在,就将这个值设置为指定的值,默认为 None。
那么这里我们可以用此方法解决:
print(dict.setdefault('d',0))
然后就没有问题啦。需要注意的是,当要往字典(dict)中添加新值时,就使用 setdefault 函数。如果只是单纯进行查找,遇到键不存在,或者希望在通过这个键读取值时能得到一个默认值,那么建议使用 defaultdict。
首先介绍一下这个所谓的 defaultdict,它来自于 collections 模块。collections 是一个集合模块。defaultdict(function_factory)构建的是一个类似 dictionary 的对象,其 key 的值可自行确定赋值,而 value 的类型是 function_factory 的类实例,并且具有默认值。这里还引入了一个概念,即工厂函数,在 Python 中,工厂函数指的是那些内建函数,它们都是类对象,当调用它们时,实际上是创建了一个类实例。
比如像 int()、str()、set()之类的,接下来我们来看一些例子:
import collections
s 中有('red', 1)。
创建一个名为 d 的对象,它是一个 collections.defaultdict 类型,其默认值是一个空列表。
for k, v in s:
d[k].append(v)
print(d['yellow'])
print(d['white'])
print(list(d.items()))
我们最后得到的输出结果如下:
我们可以看到,当 d 中不存在对应的 key 时,最终返回的是一个空列表。这是因为在设置 defaultdict 时,我们使用的工厂函数是 list,而 list 的默认值就是空列表。接下来,我们再来看一下如果工厂函数是 set() 会是什么情况。
import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
创建了一个名为 d 的变量,它是一个 collections.defaultdict(set)类型的对象,用于存储键值对,其中值的类型是集合 set 。
for k, v in s:
d[k].add(v)
print(d['yellow'])
print(d['white'])
print(list(d.items()))
结果输出如下:
python 报错显示出现了 KeyError: 'longitude'
python 报错显示存在 KeyError: ‘longitude’
报错界面如下图所示:
我在网上进行了寻找方法的行为,最终确实找到了一个解决方案,这个解决方案对你可能是有用的,即解决方案一。
但是我进行了尝试,然而还是没有效果。接着,当我集中目光仔细看时,发现竟然又是因为我的粗心而导致的。啊,就像下面的图所示,在“longitude”前面少加了一个逗号。
如下图:
所以这个问题就解决啦,好,我继续我的课程设计了。
这是个人的经验,希望能给大家当作参考,同时也希望大家多多支持脚本之家。