字典默认值处理

使用Python字典时,如果键不存在,使用形如m[‘key’](key在字典m中不存在)会抛出错误异常,下面通过介绍几种默认值处理方式:

(1)使用字典的get(key,[default])方法。

当键存在时,get方法返回键对应的取值;当键不存在时,如果没有指定default,则会返回None。如下程序展示了如何使用get方法,该程序对字符串中各个字符位置进行记录。
————————————
seq = ‘abcaba’
m = {}
for idx, ch in enumerate(seq):
lt = m.get(ch)
if lt is None:
lt = []
m[ch] = lt
lt.append(idx)
————————————
从上面的程序可以看出,通过get取值,需要判断值是否为None,如果为None还需要在字典里设置取值,过程相对繁琐,下面介绍的setdefault方法将简化这一过程。

(2)使用字典setdefault(key, [default])方法

当键存在时,setdefault返回键对应的取值;当键不存在是,则设置字典中该键的取值为default(default默认取值为None),然后将default返回。如下程序展示了使用setdefault简化字符位置统计程序。
————————————
seq = ‘abcaba’
m = {}
for idx, ch in enumerate(seq):
lt = m.setdefault(ch, [])
lt.append(idx)
————————————

(3)使用defaultdict

除了使用dict相关方法进行默认值处理,python还提供了defaultdict类用于处理默认值,defaultdict在构造时需要指定一个可调用对象,在使用__getitem__取值时,如果键不存在,则会使用可调用的对象构造默认值。如下程序展示了使用defaultdict的字符位置统计程序。
————————————
from collections import defaultdict
seq = ‘abcaba’
m = defaultdict(list)
for idx, ch in enumerate(seq):
lt = m[ch]
lt.append(idx)
————————————

(4)使用特殊方法__missing__

所有的映射类型(Mapping,字典是Mapping类型)在使用__getitem__找不到键时都会调用__missing__方法,因此通过重载该方法,可以设置默认值。如下程序展示了使用__missing__方法的字符位置统计程序。
————————————
from collections import UserDict
class MyDict(UserDict):
def __missing__(self, key):
value = []
self[key] = value
return value
seq = ‘abcaba’
m = MyDict()
for idx, ch in enumerate(seq):
lt = m[ch]
lt.append(idx)
print(m)
————————————

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注