查看原文
其他

字典访问不存在的key 时,如何才能不报错?

写代码的明哥 Python编程时光 2021-08-09


本篇选自 Python黑魔法指南 -> 第五章 -> 第21节

Github链接: https://github.com/iswbm/magic-python


当一个字典里没有某个 key 时,此时你访问他是会报 KeyError 的。

>>> profile={}
>>> profile["age"]
Traceback (most recent call last):
  File "<stdin>", line 1in <module>
KeyError: 'age'

这里有一个小技巧,使用 collections 的 defaultdict 方法,可以帮你处理这个小问题,当你访问一个不存在的 key 时,会返回默认值。

defaultdict 接收一个工厂方法,工厂方法返回的对象就是字典的默认值。

常用的工厂方法有,我们常见的 int,str,bool 等

>>> a=int()
>>> a
0
>>> 
>>> b=str()
>>> b
''
>>>
>>> c=bool()
>>> c
False

因为 defaultdict 可以这样子用。

>>> import collections
>>> profile=collections.defaultdict(int)
>>> profile
defaultdict(<class 'int'>, {})
>>> profile["age"]
0
>>> profile=collections.defaultdict(str)
>>> profile
defaultdict(<class 'str'>, {})
>>> profile["name"]
''

当然既然是工厂方法,你也可以使用 lambda 匿名函数来实现自定义的效果,比如我们使用 str 就会设置一个空字符串,但这并不是我想要的,我想要的是设置一个其他字符串,你就可以像下面这样子。

>>> info=collections.defaultdict(lambda"default value")
>>> info
defaultdict(<function <lambda> at 0x10ff10488>, {})
>>>
>>> info["msg"]
'default value'





推荐阅读


太赞了!《Python 黑魔法指南》终于面世了

50 款数据可视化分析工具大集合,总有一款适合你

Selenium自动登录淘宝,我无意间发现了登录漏洞!

黑魔法:执行任意代码都会自动念上一段 『平安经』

《Python黑魔法指南》全新版本 v2.0 上线发布

用Python写出这样的进度条,刷新了我对进度条的认知



长按下图  ➡   关注博主

(按左边关注 Python, 按右边关注 Goalng


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存