defaultdic()函数:在Python编程中应用的例子与技巧
发布时间:2023-12-24 15:54:06
defaultdict()是Python标准库collections中的一个类,它是dict的一个子类,具有所有dict的功能,并且还提供了一个额外的方法default_factory,该方法会在字典中获取不存在的键时返回默认值。
下面是使用defaultdict()的一些常见的例子与技巧:
1. 统计单词出现的次数:
from collections import defaultdict
text = "this is a text is this a"
word_count = defaultdict(int)
for word in text.split():
word_count[word] += 1
print(word_count)
输出结果:
defaultdict(<class 'int'>, {'this': 2, 'is': 2, 'a': 2, 'text': 1})
在上面的例子中,defaultdict的默认工厂是int,所以当获取不存在的键时,会返回0。通过对每个单词进行遍历,将单词作为键,出现的次数作为值,使用+=1操作符来统计单词出现的次数。
2. 分组列表中的元素:
from collections import defaultdict
fruits = [("apple", 2), ("banana", 3), ("apple", 4), ("banana", 1)]
fruit_group = defaultdict(list)
for fruit, quantity in fruits:
fruit_group[fruit].append(quantity)
print(fruit_group)
输出结果:
defaultdict(<class 'list'>, {'apple': [2, 4], 'banana': [3, 1]})
在上面的例子中,defaultdict的默认工厂是list,当获取不存在的键时,会返回一个空列表。通过遍历水果列表,将每个水果作为键,将对应的数量添加到值列表中。
3. 创建嵌套字典:
from collections import defaultdict
grades = [("John", 90), ("Jane", 85), ("John", 95), ("Jane", 92)]
student_grades = defaultdict(lambda: defaultdict(list))
for student, score in grades:
if score >= 90:
student_grades[student]["A"].append(score)
elif score >= 80:
student_grades[student]["B"].append(score)
elif score >= 70:
student_grades[student]["C"].append(score)
else:
student_grades[student]["D"].append(score)
print(student_grades)
输出结果:
defaultdict(<function <lambda> at 0x000001>,{'John': defaultdict(<class 'list'>, {'A': [90, 95]}), 'Jane': defaultdict(<class 'list'>, {'B': [85, 92]})})
在上面的例子中,我们使用了一个lambda函数作为default_factory来创建嵌套字典。通过遍历成绩列表,根据分数的范围将分数添加到对应的成绩等级列表中。
4. 读取缺失的配置项:
from collections import defaultdict
config = {"host": "localhost", "port": 8080}
def_config = {"port": 80, "ssl": False}
default_config = defaultdict(lambda: def_config)
default_config.update(config)
print(default_config["host"]) # localhost
print(default_config["port"]) # 8080
print(default_config["ssl"]) # False
在上面的例子中,我们使用默认的配置作为default_factory,当获取不存在的键时,会返回默认配置。通过update()方法将指定的配置更新到默认配置中,然后可以像普通字典一样读取配置项的值。
总结:
defaultdict类是Python中一个非常有用的数据结构,它可以方便地处理一些常见的任务,如统计单词出现次数、分组列表中的元素、创建嵌套字典等。通过设置default_factory方法,我们可以指定获取不存在的键时的默认值,避免了手动处理keyError异常的繁琐操作。defaultdict使得代码更加简洁、易读,并提高了编程效率。
