defaultdict()语法

一、defaultdict产生的原因:

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

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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐凡星

你的鼓励将是我的动力;

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值