0. 标题
抛弃dictkey的方式访问Python字典的值
代码语言:txt复制作者: quantgalaxy@outlook.com
blog: https://blog.csdn.net/quant_galaxy
欢迎交流
1. What: dictkey访问方式是什么
从各种教程中,学到访问字典的方式,基本都是dictkey这样的方式,比如:
代码语言:python代码运行次数:0复制d = {'apple':4, 'orange':5, 'pear':6}
x = d['apple'] # 4
y = d['orange'] # 5
z = d['pear'] # 6
通过dkey来获取字典d中key对应的值。
如果访问的key不存在呢?比如:
代码语言:python代码运行次数:0复制d = {'apple':4, 'orange':5, 'pear':6}
a = d['pineapple']
代码语言:txt复制---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Cell In[202], line 3
1 d = {'apple':4, 'orange':5, 'pear':6}
----> 3 a = d['pineapple']
KeyError: 'pineapple'
如果key不存在,dkey会抛出一个KeyError类型的异常,这将导致python程序崩溃,这是非常令人烦恼的事情。
2. Why: 为什么在程序中避免抛出异常
如果是在运行一个离线任务,需要跑好几个小时,但是在运行几个小时后,程序突然崩溃了,抛出了一个KeyError,这会导致之前的结果全都失效,需要重跑。
如果是一个游戏,打boss进行了一半,一个异常导致整个游戏崩溃,也是用户不可接受的事情。
除了异常的处理,我们尽可能的,应该用非抛出异常的方式,处理各种可能性。
我们可以通过判断key是否存在的方式,先进行访问再调用,比如:
代码语言:txt复制d = {'apple':4, 'orange':5, 'pear':6}
if 'pineapple' in d:
a = d['pineapple']
else:
a = ""
通过这样的方式,可以避免访问到不存在的key,缺点就是,需要每次都要先检查在使用,并根据不同的类型设置不同的默认值。
还有一种方式,就是dict.get()方法,实现了上面的需要。如果key不存在,不会抛出异常,会返回一个None,或者可以指定默认值。
代码语言:txt复制作者: quantgalaxy@outlook.com
blog: https://blog.csdn.net/quant_galaxy
欢迎交流
3. How:如何使用dict.get()方法访问key
代码语言:txt复制d = {'apple':4, 'orange':5, 'pear':6}
x = d.get('apple') # 4
y = d.get('orange') # 5
z = d.get('pear') # 6
a = d.get('pineapple') # None
通过上面的例子,可以看出,我们完美的解决了上面出现的问题。
使用dict.get()有如下好处:
- key存在,和dictkey有一样的行为。
- key不存在,dict.get(key)不会抛出异常。
- key不存在,dict.get(key)会返回一个默认值。
我们还可以指定dict.get()方法的默认值,dict.get(key, defaultValue),比如:
代码语言:python代码运行次数:0复制d = {'apple':4}
x = d.get('apple') # 4
y = d.get('orange', 100) # 100
z = d.get('pear', 3.14159) # 3.14159
如果key存在,实际值被返回。
如果key不存在,设置的默认值被返回,就是第二个参数。
4. 作者信息
代码语言:txt复制作者: quantgalaxy@outlook.com
blog: https://blog.csdn.net/quant_galaxy
欢迎交流