setdefault和defaultdict

78 阅读1分钟

setdefault和defaultdict都属于处理字典键缺失的方法,但是具体的逻辑有所不同。

setdefault

setdefault的使用很简单,而且它不需要导入什么额外的包,跟sort()一样可以直接使用。

image.png

在这个例子中,dict1一开始是个空字典,setdefault先按照键key1去查找对应的值,由于字典为空没找到,因此会新建键值对key1和value1,然后插入dict1中。

相对应的,一旦key1已经存在于字典dict1中,那么就会直接取出key1对应的value1,而不会更改为value2。 image.png

setdefault和get的对比

从上面的例子可以看出,一旦要查找的键在字典中不存在,setdefault是会把新的键值对插入到字典中的。

而get()就相反,一旦键不存在于字典中,它就会返回指定的默认值,但不会将新的键值对插入字典中。

image.png 可以看到,key1并不存在于字典中,使用get()返回的是指定的默认值0,与setdefault的区别时,字典并没有更新。

defaultdict

setdefault()可以直接使用,但是defaultdict()的使用需要先导入collections包。

defaultdict()严格来讲有两个作用:

  1. 初始化一个字典
  2. 利用工厂函数设置所有的值为同一类型

image.png