当我们使用 Python 内置的字典(dict)时,如果要给其中的某个键对应的值进行初始化操作,通常需要先判断该键是否已经存在,若不存在则需要向字典中添加该键,并给其对应的值初始化为指定的值。这样的操作会比较繁琐,不仅增加了代码量,而且可能会影响代码的可读性和可维护性。在这种情况下,可以使用 Python 标准库中 collections 模块提供的 defaultdict() 函数对字典进行初始化,即可以指定一个默认值,并在访问字典中不存在的键时返回该默认值。
下面将详细介绍 defaultdict() 函数的用法:
基本用法
defaultdict() 函数用法与内置的 dict 类型基本相同,可以使用 dict() 或 {} 进行创建,与 dict 不同的是,在初始化 defaultdict 对象时,需要指定一个默认值(通常为一个函数),该函数返回的值将作为该字典中任何不存在的键的默认值。
from collections import defaultdict
# 初始化一个默认值为0的字典
d = defaultdict(int)
print(d['hello']) # 0
# 初始化一个默认值为空列表的字典
d = defaultdict(list)
print(d['hello']) # []
# 初始化一个默认值为固定值'Unknown'的字典
d = defaultdict(lambda: 'Unknown')
print(d['hello']) # 'Unknown'
上面的例子中,我们使用了三种不同的默认值:int,list 和 lambda 表达式(返回字符串'Unknown')。在初始化字典后,当我们访问一个不存在的键时,字典会按照指定的类型自动进行初始化,返回对应的默认值。
示例一:对列表进行分组统计
接下来,我们将通过一个示例来说明 defaultdict() 的具体用法。
from collections import defaultdict
# 一系列单词列表
words_list = ['hello', 'world', 'python', 'hello', 'java', 'python', 'java', 'java']
# 对单词进行分组统计
word_count = defaultdict(int)
for word in words_list:
word_count[word] += 1
print(word_count)
# 输出:defaultdict(<class 'int'>, {'hello': 2, 'world': 1, 'python': 2, 'java': 3})
上面的代码中,我们将一个由单词组成的列表进行了分组统计,具体实现方法为:
- 首先初始化一个默认值为 0 的 defaultdict 对象,用于记录单词的出现次数;
- 然后遍历单词列表,对每个单词都进行累加操作;
- 最终得到一个按照单词分组的字典,其中键为单词,值为单词出现的次数。
上述代码的输出结果表明,'hello' 出现了 2 次,'world' 出现了 1 次,'python' 出现了 2 次,'java' 出现了 3 次。这种使用 defaultdict() 进行分组统计的方法可以方便地将某一属性相同的对象进行分组统计,是数据分析和数据挖掘中经常使用的一种技巧。
示例二:对字典进行多值列表的初始化
下面再给出一个示例,说明在多值列表的初始化中 defaultdict() 的用法。
from collections import defaultdict
# 初始化一个多值字典
d = defaultdict(list)
d['hello'].append('world')
d['hello'].append('python')
d['hi'].append('java')
print(d)
# 输出:defaultdict(<class 'list'>, {'hello': ['world', 'python'], 'hi': ['java']})
上面的代码中,我们首先使用 defaultdict() 初始化一个空列表列表字典,然后按照键值对的形式添加多个键和对应的值。由于字典默认值为空列表,因此在添加键和值的过程中,不需要判断该键是否存在,直接进行添加即可。最后,我们得到了一个包含多个值的字典,即 d,其中键为字符串类型,值为列表类型,可以方便地对多值问题进行处理。
通过上面两个示例,我们详细地介绍了 defaultdict() 函数的用法,并给出了一些使用该函数的示例。使用 defaultdict() 可以有效地减少代码的复杂性,并提高代码的可读性和可维护性,具有很好的实用价值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 中defaultdict()对字典进行初始化的用法介绍 - Python技术站