欢迎访问宙启技术站
智能推送

_collections模块中的defaultdict():用法详解

发布时间:2023-12-24 15:51:18

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函数或自定义的类实例来自定义默认值的规则。