Python defaultdict与普通dict的区别

Python defaultdict与普通dict的区别

在本文中,我们将介绍Python中的Collections.defaultdict与普通dict之间的区别。默认字典(defaultdict)是Python标准库中的一个有用的数据结构,它是dict的一个子类。它提供了一种简单的方法来处理字典中缺失的键。

阅读更多:Python 教程

默认字典的特点

默认字典(defaultdict)的特点是在初始化时指定一个默认的值类型,并且当访问一个不存在的键时,会自动返回默认值。这个默认值可以是任何类型,例如int、list、set等。

我们来看一个简单的例子,首先创建一个默认字典,其默认值为0:

from collections import defaultdict

d = defaultdict(int)

print(d['a'])  # 输出:0
print(d['b'])  # 输出:0
Python

在上述例子中,当我们访问字典中不存在的键时,会自动返回默认值0。这使得我们可以避免通过d.get(key, default)等方式来处理缺失的键,使代码更加简洁。

默认字典与普通字典的区别

默认字典与普通字典在使用方式上基本相同,都是通过键来访问对应的值。然而,它们之间有一些细微的差异。

首先,创建一个普通字典:

d = {}

print(d['a'])  # 抛出KeyError异常
Python

在上述例子中,当我们访问字典中不存在的键时,会抛出KeyError异常。这需要我们事先通过判断或使用异常处理来处理这种情况。

与之相比,如果我们使用默认字典来避免这种异常:

d = defaultdict(int)

print(d['a'])  # 输出:0
Python

当访问字典中不存在的键时,默认字典不会抛出异常,而是返回默认值0。

其次,使用默认字典时,如果不存在的键被访问,它会在字典中自动添加这个键,并将默认值作为其值。这在某些情况下是非常有用的。

d = defaultdict(list)

print(d['a'])  # 输出:[]
print(d)  # 输出:{'a': []}
Python

在上述例子中,当我们访问不存在的键’a’时,字典d会自动添加这个键,并将一个空列表作为其值。

默认字典的应用场景

默认字典在处理一些需要初始化或处理缺失键的情况下特别有用。下面列举了一些常见的应用场景:

统计字符出现次数

默认字典可以很方便地用于统计字符出现的次数:

from collections import defaultdict

s = "hello world"

char_count = defaultdict(int)

for char in s:
    char_count[char] += 1

print(char_count)
Python

输出结果为:

defaultdict(<class 'int'>, {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
Python

分组数据

默认字典可以用来将数据按照某个属性值进行分组:

from collections import defaultdict

students = [
    {'name': 'Tom', 'grade': 'A'},
    {'name': 'Jane', 'grade': 'B'},
    {'name': 'John', 'grade': 'A'},
    {'name': 'Alice', 'grade': 'C'},
    {'name': 'Bob', 'grade': 'B'},
]

students_by_grade = defaultdict(list)

for student in students:
    students_by_grade[student['grade']].append(student['name'])

print(students_by_grade)
Python

输出结果为:

defaultdict(<class 'list'>, {'A': ['Tom', 'John'], 'B': ['Jane', 'Bob'], 'C': ['Alice']})
Python

总结

通过本文的介绍,我们了解了默认字典(defaultdict)与普通字典的区别。默认字典在访问不存在的键时不会抛出异常,并返回一个默认值。它也可以自动将缺失的键添加到字典中,并设置默认值作为其值。这使得默认字典在处理缺失键或需要初始化的情况下非常有用。无论是统计字符次数,还是分组数据,使用默认字典都可以简化代码并提高效率。希望通过本文的介绍,您对默认字典的使用有了更深入的了解。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册