_collections模块中的defaultdict():用法详解
defaultdict类是collections模块中的一个类,它是dict类的子类,提供了一个默认值的功能。在使用defaultdict时,如果字典中的键不存在,那么会自动创建一个默认值,并返回该默认值。这个默认值可以通过参数传入到defaultdict类中。
下面是defaultdict()的用法详解和使用例子:
1. 创建defaultdict对象
可以通过collections模块中的defaultdict函数来创建一个defaultdict对象。这个函数的 个参数是一个函数或类,用于生成默认值。常见的函数有int(生成整数默认值0)、list(生成空列表默认值[])、str(生成空字符串默认值"")等等。
例如,创建一个默认值为0的defaultdict对象:
from collections import defaultdict default_dict = defaultdict(int)
2. 添加键值对
与dict类一样,可以使用键来获取和设置对应的值。当获取一个不存在的键时,defaultdict会自动创建一个默认值,并返回该默认值。
default_dict['a'] = 1 default_dict['b']
在这个例子中,键'a'存在,因此返回对应的值1。而键'b'不存在,defaultdict会自动创建一个默认值0,并返回0。
3. 使用未定义的键
defaultdict类最有趣的地方是当使用一个未定义的键时,它会自动创建一个默认值,并返回该默认值。这个功能在处理容器的嵌套结构时非常有用。
例如,创建一个字典,字典的值为一个列表,并向其中添加元素:
from collections import defaultdict d = defaultdict(list) d['a'].append(1) d['a'].append(2) d['b'].append(3)
在这个例子中,字典d的默认值是一个空列表[]。当向d['a']添加元素时,由于d['a']原本不存在,所以会自动创建一个空列表并添加元素1。再次添加元素2时,会往这个列表中继续添加。
4. 使用lambda函数作为默认值
除了使用内置的函数作为默认值之外,还可以使用lambda函数来自定义默认值的规则。例如,可以使用lambda函数来定义一个默认值为字符串"unknown":
from collections import defaultdict d = defaultdict(lambda: "unknown") d['a'] = "apple" d['b']
在这个例子中,字典d的默认值为字符串"unknown"。当使用一个未定义的键时,会自动创建一个默认值,并返回该默认值。所以d['b']会返回字符串"unknown"。
5. 默认值可以是任意类型
在defaultdict中,默认值可以是任意类型。不仅可以是int、list、str等内置类型,也可以是自定义的类实例。
例如,可以将默认值设置为一个自定义的对象:
from collections import defaultdict
class MyObject:
def __init__(self, name):
self.name = name
def __repr__(self):
return f"MyObject({self.name})"
default_dict = defaultdict(lambda: MyObject("unknown"))
print(default_dict['a'])
在这个例子中,字典default_dict的默认值为一个MyObject类的实例。当使用一个未定义的键时,会自动创建一个默认值,即一个MyObject类的实例。输出结果为MyObject(unknown)。
总结:
defaultdict类是collections模块中的一个类,它是dict类的子类,提供了一个默认值的功能。在使用defaultdict时,如果字典中的键不存在,那么会自动创建一个默认值,并返回该默认值。这个默认值可以通过参数传入到defaultdict类中。可以使用内置的函数如int、list、str来指定默认值,也可以使用lambda函数或自定义的类实例来自定义默认值的规则。
