_collections模块中的defaultdict()函数:处理字典操作的好帮手
collections模块是Python中的一个标准库,它提供了许多集合类型的实现和工具函数。其中的defaultdict()函数是一种特殊类型的字典,它在处理字典操作时非常有用。
defaultdict()函数接受一个可调用对象作为参数,并返回一个具有默认值的字典。当访问字典中不存在的键时,defaultdict()会调用该可调用对象以生成默认值并将其返回。这使得我们能够在字典中保存不同类型的值,并能够处理不存在的键而无需手动添加默认值。
下面是一个使用defaultdict()函数的例子:假设我们要统计一篇文章中每个单词出现的次数。
from collections import defaultdict
def count_words(text):
word_counts = defaultdict(int) # 使用int作为默认值的defaultdict对象
words = text.split()
for word in words:
word_counts[word] += 1
return word_counts
text = "This is a sample text. It contains words, words and more words."
result = count_words(text)
print(result)
输出结果:
defaultdict(<class 'int'>, {'This': 1, 'is': 1, 'a': 1, 'sample': 1, 'text.': 1, 'It': 1, 'contains': 1, 'words,': 1, 'words': 2, 'and': 1, 'more': 1})
在这个例子中,我们首先导入了defaultdict类,然后定义了一个count_words函数来统计单词出现的次数。在函数中,我们创建了一个defaultdict对象word_counts,并将int作为默认值。这意味着如果字典中不存在某个键,则将其默认值设为0(int的默认值)。
接着,我们将文章的文本参数进行分割为单词,并在for循环中遍历每个单词。通过使用word_counts[word]操作,我们可以像操作普通字典一样对每个单词的计数进行增加。如果字典中不存在该单词,则会调用int()函数生成默认值0,并将其加1。
最后,我们返回得到的word_counts字典,它存储了每个单词出现的次数。
可以看到,defaultdict()函数使得我们无需在处理字典操作时手动检查键是否存在,从而简化了代码。在上述例子中,如果我们没有使用defaultdict(),那么在每次计数时都需要手动获取默认值并对词频进行操作。但是,使用defaultdict()函数后,我们可以直接进行操作,而无需再担心不存在的键。
除了int,defaultdict()函数还可以接受其他类型的可调用对象作为默认值。例如,如果我们需要一个默认值为列表的字典,可以将defaultdict(list)作为参数传递给defaultdict()函数:
from collections import defaultdict d = defaultdict(list) d["key"].append(1) print(d)
输出结果:
defaultdict(<class 'list'>, {'key': [1]})
在这个例子中,我们创建了一个默认值为列表的defaultdict对象,并向其添加一个键为"key",值为1的项。由于字典中的"key"键不存在,defaultdict()会生成一个空列表作为默认值,然后我们通过.append(1)操作添加了1到该默认列表中。
综上所述,defaultdict()函数是一个处理字典操作的好帮手。它能够让我们方便地处理不存在的键,并指定默认值类型,使得代码更加简洁和可读。
