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

_collections模块中的defaultdict():字典默认值的快捷实现方式

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

collections模块是Python标准库中提供的一个常用数据类型的拓展集合。其中包含了一个非常有用的类defaultdict(),该类能够提供字典默认值的快捷实现方式。本文将对defaultdict()进行详细介绍,并提供使用示例。

defaultdict()的作用是在访问字典的不存在的键时,返回一个默认值。这个默认值可以是任何类型的对象,默认是None。相比于标准字典,使用defaultdict()可以避免每次访问不存在的键时都需要进行容错判断的情况,使得代码更加简洁和高效。

defaultdict()的用法非常简单,首先需要导入collections模块,然后使用defaultdict()构造一个新的字典对象。例如:

from collections import defaultdict

d = defaultdict(int)  # 构造一个默认值为0的字典

上述代码中,使用defaultdict()创建了一个空字典d,并且指定了默认值为0。这意味着当我们访问d中不存在的键时,将返回默认值0。

下面是一些defaultdict()的常见用法:

1. 计数

defaultdict()可以方便地实现一个计数器,统计元素出现的次数。示例代码如下:

from collections import defaultdict

d = defaultdict(int)
lst = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']

for item in lst:
    d[item] += 1

print(d)

输出结果:

defaultdict(<class 'int'>, {'apple': 3, 'banana': 2, 'orange': 1})

上述代码中,创建了一个空字典d,并指定了默认值为0。然后遍历列表lst,将列表中的每个元素作为字典d的键,并将其对应的值加1。最后打印字典d,可以看到每个元素出现的次数。

2. 分组

defaultdict()还可以用来方便地对元素进行分组。示例代码如下:

from collections import defaultdict

d = defaultdict(list)
lst = [('apple', 1), ('banana', 2), ('apple', 3), ('orange', 4), ('banana', 5)]

for key, value in lst:
    d[key].append(value)

print(d)

输出结果:

defaultdict(<class 'list'>, {'apple': [1, 3], 'banana': [2, 5], 'orange': [4]})

上述代码中,创建了一个空字典d,并指定了默认值为一个空列表。然后遍历列表lst,将列表中的每个元素的 个值作为字典d的键,并将其对应的第二个值添加到列表中。最后打印字典d,可以看到按照元素的 个值进行了分组。

3. 多级字典

defaultdict()还可以嵌套使用,构建多级字典。示例代码如下:

from collections import defaultdict

d = defaultdict(lambda: defaultdict(int))
lst = [('apple', 'red'), ('banana', 'yellow'), ('apple', 'green'), ('orange', 'orange')]

for key, value in lst:
    d[key][value] += 1

print(d)

输出结果:

defaultdict(<function <lambda> at 0x000001>, {'apple': defaultdict(<class 'int'>, {'red': 1, 'green': 1}), 'banana': defaultdict(<class 'int'>, {'yellow': 1}), 'orange': defaultdict(<class 'int'>, {'orange': 1})})

上述代码中,创建了一个空字典d,并指定了默认值为一个新的空字典,新字典的默认值为0。然后遍历列表lst,将列表中的每个元组的 个值作为外层字典d的键,并将其对应的内层字典的键取为该元组的第二个值,值加1。最后打印字典d,可以看到构建了一个多级字典。

总结:

collections模块中的defaultdict()提供了字典默认值的快捷实现方式,可以大大简化代码逻辑,并且使得代码更加简洁高效。它的常见用法包括计数、分组和多级字典等。在使用defaultdict()时,需要提前指定默认值的类型,并根据实际场景进行灵活的使用。