Python操作dict时避免出现KeyError的解决方案

  介绍

这期内容当中小编将会给大家带来有关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的解决方案