Effective Python提供90条Python3高效编程技巧和方法,接下来继续探讨字典的高效用法。
在字典的使用中,有一种非常常见的场景,也有非常常见的程序写法,这就是处理key不在字典中的情形,一般程序写法也很好想到,就是先判断key是否在字典中,再根据不同情况分别处理,这种虽然思路很清晰,但是程序代码不够简洁,会导致不论是否在字典中是否存在的,都需要多做一次判断,性能受很大影响。
这种写法可以用in关键字在if语句中进行判断实现。 一种优化方法是不用in关键字进行一次判断,而直接用异常来处理,这样节省了一次程序判断。 在try中直接使用字典中该键的值,而通过捕获KeyError异常,来处理键值不在字典中的情况。这种写法可以使大部分命中的key不用重复进行判断和分支,大大节省了执行语句条数,提高运行效率。但是对于有异常的情况仍然需要重复两次赋值操作。
再进一步优化,作者建议不用in也不用KeyError,而采用Python提供的一种get方法只需一条语句完成所有任务!get语句第一个参数是key,还存在第二个参数就是如果字典中没有该key项时给予的默认值。这样我们写代码时就不需要再额外留心是不是要处理没有key的情况了,非常的省心。 更进一步,还可以采用更简洁的方式,采用字典的内置方法setdefault,虽然写起来不太直白好看懂,但是setdefault可以直接在该key不在字典的情况下,把该key项自动新增插入字典,并赋值成默认值,再返回,简直一条龙服务了。