1. collections.defaultdict简介
Python的collections模块提供了一种名为defaultdict的数据类型。defaultdict是dict的子类,它重写了dict类的__missing__方法。defaultdict在创建时需要提供一个默认值的类型,当访问一个不存在的键时,会自动创建该键并将其值初始化为默认值。这个特点使得defaultdict非常适合处理一些特殊需求的数据结构。
2. 使用collections.defaultdict
2.1 创建defaultdict对象
要使用defaultdict,首先需要导入collections模块:
import collections
然后可以创建一个defaultdict对象。在创建时需指定一个默认值的类型,可以是int、list、dict等基本类型或自定义类型。
my_dict = collections.defaultdict(int)
上述代码创建了一个默认值类型为int的defaultdict对象。当访问一个未存在的键时,会自动把该键添加到字典中,并将其值初始化为0。
2.2 添加和访问元素
defaultdict与普通字典的使用方式基本相同。可以使用字典的索引操作符[]来添加和访问元素。
my_dict['a'] = 1
print(my_dict['a'])
上述代码将键'a'和值1添加到defaultdict对象中,并输出该键的值。
当访问一个不存在的键时,defaultdict会自动创建该键并将其值初始化为默认值。
print(my_dict['b'])
由于键'b'在defaultdict中不存在,defaultdict会自动创建该键,并将其值初始化为int类型的默认值0。
3. defaultdict的应用场景
3.1 统计字符出现次数
defaultdict可以用于快速统计字符串中每个字符出现的次数。
my_str = 'hello world'
char_count = collections.defaultdict(int)
for char in my_str:
char_count[char] += 1
print(char_count)
上述代码中,使用了defaultdict对象char_count来记录每个字符的出现次数。遍历字符串my_str,并将每个字符作为键,递增其对应的值。
3.2 分组元素
使用defaultdict可以很方便地将元素按照某个属性进行分组。
students = [{'name': 'Alice', 'age': 20},
{'name': 'Bob', 'age': 22},
{'name': 'Charlie', 'age': 20}]
group_by_age = collections.defaultdict(list)
for student in students:
group_by_age[student['age']].append(student['name'])
print(group_by_age)
上述代码中,将一个学生列表按照年龄进行分组。使用defaultdict对象group_by_age,键为年龄,值为同一年龄下的学生姓名组成的列表。
4. 总结
defaultdict是collections模块中的一个重要数据类型,它提供了一种方便的方式来处理一些特殊需求的数据结构。使用defaultdict可以简化代码,提高效率。
本文介绍了defaultdict的基本用法,包括创建defaultdict对象、添加和访问元素等。并通过实际的应用场景来说明defaultdict的使用方法。