创建默认字典

默认字典的构造函数接受一个工厂函数default_factory作为参数,可以将一个类型名看做是一个工厂函数,比如list,tuple,str等。
这个函数会在要生成默认值的时候无参调用,如果使用类型名作为工厂函数,则这个类型必须要有无参构造函数,比如:

dd = collections.defaultdict(int) #使用int作为工厂函数
print(dd['a']) #访问不存在的key:'a'
dd = collections.defaultdict(tuple) #使用tuple作为工厂函数
print(dd['a']) #访问不存在的key:'a'
dd = collections.defaultdict(str) #使用str作为工厂函数
print(dd['a']) #访问不存在的key:'a'
class Test:
    def __init__(self,name): #只有一个构造函数,而且它有一个参数
        print("init")
dd = collections.defaultdict(Test) #使用自定义类型Test作为工厂函数
print(dd['a']) #运行到这里就会出现异常,原因是Test类没有无参的构造函数

直到最后一行语句之前,上面的结果是:

0
()

第三行是字符串的默认值:空字符串。

如果不提供工厂函数,那么默认值的功能就失效了,此时默认字典与普通dict表现的功能一致:

dd = collections.defaultdict()
print(dd['a']) #虽然dd是一个默认字典,但由于没有指定工厂函数,没办法产生一个默认值,因此还是会发生异常

编程要求

根据右边编辑器中各个函数中的提示,将函数补充完整,使得程序能够正常运行并输出正确的结果。
右侧编辑器的4个函数会被依次调用,并产生4个默认字典,并会以类似如下的方式,获取并输出默认值:

dd = GetIntDefaultDict()
print(“int默认字典的默认值:”,dd[‘a’])

测试说明
正确的补充代码后应该得到的结果:

int默认字典的默认值: 0
list默认字典的默认值: []
tuple默认字典的默认值: ()
str默认字典的默认值:

代码:

import collections
def GetIntDefaultDict():
    #返回一个空的int类型的默认字典
    dd = collections.defaultdict(int)   #使用int作为工厂函数
    return dd
def GetListDefaultDict():
    #返回一个空的list类型的默认字典
    dd = collections.defaultdict(list)  #使用list作为工厂函数
    return dd
def GetTupleDefaultDict():
    #返回一个空的tuple类型的默认字典
    dd = collections.defaultdict(tuple) #使用tuple作为工厂函数
    return dd
def GetStrDefaultDict(): 
    #返回一个空的str类型的默认字典
    dd = collections.defaultdict(str)   #使用str作为工厂函数
    return dd
#调用上面的函数
GetIntDefaultDict()
GetListDefaultDict()
GetTupleDefaultDict()
GetStrDefaultDict()