defaultdict()语法

一、defaultdict产生的原因:

        当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错。

defaultdict()语法_第1张图片

defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值。

二、defaultdict函数:

函数:dict =defaultdict( factory_function)

1、常规用法:

        factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set(),int对应0:

例如:

from collections import defaultdict
dict1 = defaultdict(int)
dict2 = defaultdict(set)
dict3 = defaultdict(str)
dict4 = defaultdict(list)
dict1[2] ='two'
 
print(dict1[1])  # 0
print(dict2[1])  # set()
print(dict3[1])  #
print(dict4[1])  # []

2、自定义类型:

        factory_function如果传入的是类对象,那么默认值会调用类的构造函数并返回对应实例;如果是函数,则直接调用函数,并将函数返回值作为默认值。

例如:

from collections import defaultdict
  
class Cls:
    def __init__(self, val='hello'):
        self.val = val
    def __str__(self):
        return self.val

def fun(val=121):
    return val

dic_1 = defaultdict(Cls)
dic_2 = defaultdict(fun)

print(dic_1['a'])  # hello
print(dic_2['a'])  # 121

3、重复调用问题:

当我们多次取不存在的相同key对应的默认值时,但它只会调用了一次取默认值函数。

例如:

from collections import defaultdict
 
def fun(val=121):
    print('创建了默认值')
    return val
 
dic = defaultdict(fun) 
for i in range(1000):
    dic['a']            

dic['b']

输出:

创建了默认值
创建了默认值

注意事项:只调用了一次dic['a'],调用一次dic['b'];

4、返回的默认值问题:

当key相同时返回的默认值是同一个对象;

当key不同时返回的默认值不是同一个对象;

例如:

from collections import defaultdict
 
class Cls:
    def __init__(self, val='hello'):
        self.val = val
    def __str__(self):
        return self.val

dic = defaultdict(Cls) 

print(dic['a']== dic['a'])   # True
print(dic['a']== dic['b'])   # False
 

你可能感兴趣的:(python,算法,linux)