Python标准库中的defaultdict模块是一种扩展了字典的数据结构,它在实现上和普通字典基本一致,但在某些特定场景下使用起来会更加方便,比如创建字典时可以指定默认值,当访问字典未定义的键时,返回默认值而不是报错。
本篇攻略将详细介绍Python标准库defaultdict模块的使用方法,包括创建和初始化defaultdict对象,以及如何利用它统计数据、分组计数等实际应用场景。
创建和初始化defaultdict对象
要使用defaultdict模块,首先需要导入该模块:
from collections import defaultdict
defaultdict创建的对象和普通字典对象在用法上基本相同。例如,下面的示例代码创建了一个defaultdict对象,并添加了一些键值对:
# 创建一个 defaultdict 对象,初始值为 []
cc = defaultdict(list)
# 添加键值对,键为 "category1",值为 1
cc['category1'].append(1)
# 输出字典
print(cc)
# 输出: defaultdict(<class 'list'>, {'category1': [1]})
上述代码定义了一个defaultdict对象,并指定初始值为空列表,即键不存在时会返回空列表。当向这个字典对象添加键值对时,它会像普通的字典对象一样存储。
同时也可以指定其他初始值,例如:
# 创建一个 defaultdict 对象,初始值为 0
dd = defaultdict(int)
# 添加键值对,键为 "key1",值为 1
dd['key1'] = 1
# 输出字典
print(dd)
# 输出: defaultdict(<class 'int'>, {'key1': 1})
上述代码定义了一个defaultdict对象,并将初始值指定为0,即键不存在时会返回0。当向这个字典对象添加键值对时,它会像普通的字典对象一样存储。
使用defaultdict统计数据
defaultdict非常适合用于统计数据。下面的示例代码演示了如何使用defaultdict计算一个字符串中各个单词的出现次数:
from collections import defaultdict
# 文本内容
text = "the quick brown fox jumps over the lazy dog"
# 将文本内容转换成列表
words = text.split()
# 创建一个默认值为int的defaultdict对象
word_count = defaultdict(int)
# 遍历单词列表,统计每个单词出现的次数
for word in words:
word_count[word] += 1
# 输出单词出现次数
for k, v in word_count.items():
print(k, v)
上述代码定义了一个defaultdict对象,并将初始值指定为0。在遍历单词列表时,逐个将单词作为键存入defaultdict对象中,并给相应的键值加1,从而实现计数操作。最后输出单词出现次数。
使用defaultdict进行分组计数
defaultdict还可以用于对数据进行分组计数。下面的示例代码演示了如何使用defaultdict将一个学生名单按照性别进行分组:
from collections import defaultdict
# 学生名单
students = [('Alice', 'F'), ('Bob', 'M'), ('Charlie', 'M'), ('David', 'M'), ('Eve', 'F')]
# 创建默认值为list的defaultdict对象
grouped_students = defaultdict(list)
# 按性别进行分组
for student, gender in students:
grouped_students[gender].append(student)
# 输出分组结果
for gender in grouped_students:
print('Gender:', gender)
for student in grouped_students[gender]:
print(student)
上述代码定义了一个defaultdict对象,并将初始值指定为空列表。在遍历学生名单时,按照学生性别对学生进行分组,并将每个学生姓名添加到对应的组别列表中。最后输出分组结果。
总结
本篇攻略介绍了Python标准库defaultdict模块的使用方法,包括创建和初始化defaultdict对象,以及如何利用它统计数据、分组计数等实际应用场景。defaultdict通过提供默认值的方式,让我们在使用字典时更加方便快捷,避免了不必要的异常报错和判断语句。