这期内容当中小编将会给大家带来有关Python操作dict时避免出现KeyError的解决方案,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
在读取dict的键和值时,如果关键不存在,就会触发KeyError错误,如:
t={ & # 39;一个# 39;:& # 39;1 & # 39; & # 39;b # 39;: & # 39; 2 & # 39; & # 39;c # 39;: & # 39; 3 & # 39; } 打印(t [& # 39; d # 39;])
就会出现:
KeyError: & # 39; d # 39;
引用><强>第一种解决方法强>
首先测试关键是否存在,然后才进行下一步操作,如:
t={ & # 39;一个# 39;:& # 39;1 & # 39; & # 39;b # 39;: & # 39; 2 & # 39; & # 39;c # 39;: & # 39; 3 & # 39; } 如果& # 39;d # 39;t: 打印(t [& # 39; d # 39;]) 其他: 打印(& # 39;不存在# 39;)会出现:
不存在
引用><强>第二种解决方法强>
利用dict内置的获得(关键(违约))方法,如果关键存在,则返回其价值,否则返回默认;使用这个方法永远不会触发KeyError,如:
t={ & # 39;一个# 39;:& # 39;1 & # 39; & # 39;b # 39;: & # 39; 2 & # 39; & # 39;c # 39;: & # 39; 3 & # 39; } 打印(t.get (& # 39; d # 39;))会出现:
引用>没有
加上默认参数:
t={ & # 39;一个# 39;:& # 39;1 & # 39; & # 39;b # 39;: & # 39; 2 & # 39; & # 39;c # 39;: & # 39; 3 & # 39; } print (t.get (& # 39; d # 39; & # 39;不存在# 39;)) 打印(t)会出现:
不存在
引用>
{& # 39;一个# 39;:& # 39;1 & # 39;,& # 39;c # 39;: & # 39; 3 & # 39;, & # 39; b # 39;: & # 39; 2 & # 39;}<强>第三种解决方法强>
利用dict内置的setdefault(关键(违约))方法,如果关键存在,则返回其价值;否则插入此键,其值为默认,并返回默认;使用这个方法也永远不会触发KeyError,如:
t={ & # 39;一个# 39;:& # 39;1 & # 39; & # 39;b # 39;: & # 39; 2 & # 39; & # 39;c # 39;: & # 39; 3 & # 39; } 打印(t.setdefault (& # 39; d # 39;)) 打印(t)会出现:
没有
引用>
{& # 39; b # 39;: & # 39; 2 & # 39;, & # 39; d # 39;:没有,& # 39;一个# 39;:& # 39;1 & # 39;,& # 39;c # 39;: & # 39; 3 & # 39;}加上默认参数:
t={ & # 39;一个# 39;:& # 39;1 & # 39; & # 39;b # 39;: & # 39; 2 & # 39; & # 39;c # 39;: & # 39; 3 & # 39; } print (t.setdefault (& # 39; d # 39; & # 39;不存在# 39;)) 打印(t)会出现:
不存在
引用>
{& # 39; c # 39;: & # 39; 3 & # 39;, & # 39; d # 39;: & # 39;不存在# 39;,& # 39;一个# 39;:& # 39;1 & # 39;,& # 39;b # 39;: & # 39; 2 & # 39;}<强>第四种解决方法强>
向类dict增加__missing__()方法,当关键不存在时,会转向__missing__()方法处理,而不触发KeyError,如:
t={ & # 39;一个# 39;:& # 39;1 & # 39; & # 39;b # 39;: & # 39; 2 & # 39; & # 39;c # 39;: & # 39; 3 & # 39; } 类反(dict类型): def __missing__(自我,键): 回来没有 c=计数器(t) 打印(c [& # 39; d # 39;])会出现:
引用>没有
更改返回值:
t={ & # 39;一个# 39;:& # 39;1 & # 39; & # 39;b # 39;: & # 39; 2 & # 39; & # 39;c # 39;: & # 39; 3 & # 39; } 类反(dict类型): def __missing__(自我,键): 返回键 c=计数器(t) 打印(c [& # 39; d # 39;]) 打印(c)会出现:
d
引用>
{& # 39; c # 39;: & # 39; 3 & # 39;, & # 39;一个# 39;:& # 39;1 & # 39;,& # 39;b # 39;: & # 39; 2 & # 39;}<强>第五种解决方法强>
利用collections.defaultdict ([default_factory[…]])对象,实际上这个是继承自dict类型,而且实际也是用到的__missing__()方法,其default_factory参数就是向__missing__()方法传递的,不过使用起来更加顺手:
,如果default_factory为None,则与dict无区别,会触发KeyError错误,如:进口集合 t={ & # 39;一个# 39;:& # 39;1 & # 39; & # 39;b # 39;: & # 39; 2 & # 39; & # 39;c # 39;: & # 39; 3 & # 39; } t=collections.defaultdict(没有,t) 打印(t [& # 39; d # 39;])会出现:
KeyError: & # 39; d # 39;
引用>Python操作dict时避免出现KeyError的解决方案