欢迎访问宙启技术站
智能推送

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使得代码更加简洁、易读,并提高了编程效率。