Python字典是一种非常灵活的数据结构,可以用来存储键值对。但是,在处理字典时,经常会遇到一个问题:如果访问一个不存在的键,会引发 KeyError
。为了解决这个问题,Python 提供了几种方法来设置字典的默认值。今天我们就来详细了解一下这些技巧。
1. 使用 get
方法
get
方法是获取字典中键值对的一种安全方式。如果键不存在,它不会抛出异常,而是返回一个默认值。
# 创建一个字典
my_dict = {'apple': 3, 'banana': 5}
# 使用 get 方法获取键 'apple' 的值
print(my_dict.get('apple')) # 输出: 3
# 使用 get 方法获取键 'orange' 的值,如果不存在则返回 0
print(my_dict.get('orange', 0)) # 输出: 0
2. 使用 setdefault
方法
setdefault
方法不仅可以在键不存在时返回默认值,还可以将该键值对添加到字典中。
# 创建一个字典
my_dict = {'apple': 3, 'banana': 5}
# 使用 setdefault 方法获取键 'apple' 的值
print(my_dict.setdefault('apple', 0)) # 输出: 3
# 使用 setdefault 方法获取键 'orange' 的值,如果不存在则返回 0 并添加到字典中
print(my_dict.setdefault('orange', 0)) # 输出: 0
print(my_dict) # 输出: {'apple': 3, 'banana': 5, 'orange': 0}
3. 使用 collections.defaultdict
collections.defaultdict
是一个特殊的字典子类,它可以自动为不存在的键提供一个默认值。这个默认值是由一个工厂函数提供的。
from collections import defaultdict
# 创建一个 defaultdict,工厂函数为 int
my_dict = defaultdict(int)
# 访问不存在的键 'apple'
print(my_dict['apple']) # 输出: 0
# 添加一些键值对
my_dict['banana'] = 5
print(my_dict['banana']) # 输出: 5
# 访问另一个不存在的键 'orange'
print(my_dict['orange']) # 输出: 0
# 打印整个字典
print(my_dict) # 输出: defaultdict(<class 'int'>, {'apple': 0, 'banana': 5, 'orange': 0})
4. 使用 dict.setdefault
和 collections.defaultdict
的区别
dict.setdefault
只在第一次访问不存在的键时设置默认值,之后再次访问该键时不会再调用工厂函数。collections.defaultdict
每次访问不存在的键时都会调用工厂函数来生成默认值。
5. 高级技巧:使用 lambda
函数作为工厂函数
有时候,我们需要更复杂的默认值生成逻辑,可以使用 lambda
函数作为工厂函数。
from collections import defaultdict
# 创建一个 defaultdict,工厂函数为 lambda 表达式
my_dict = defaultdict(lambda: 'Default Value')
# 访问不存在的键 'apple'
print(my_dict['apple']) # 输出: Default Value
# 访问另一个不存在的键 'banana'
print(my_dict['banana']) # 输出: Default Value
# 打印整个字典
print(my_dict) # 输出: defaultdict(<function <lambda> at 0x7f7c3a3b7ee0>, {'apple': 'Default Value', 'banana': 'Default Value'})
6. 实战案例:统计单词出现次数
假设我们有一个文本文件,需要统计每个单词出现的次数。我们可以使用 collections.defaultdict
来实现这个功能。
from collections import defaultdict
import re
# 读取文本文件
with open('example.txt', 'r') as file:
text = file.read()
# 使用正则表达式分割单词
words = re.findall(r'\w+', text.lower())
# 创建一个 defaultdict,工厂函数为 int
word_count = defaultdict(int)
# 统计每个单词出现的次数
for word in words:
word_count[word] += 1
# 打印每个单词及其出现次数
for word, count in word_count.items():
print(f'{word}: {count}')
总结
本文介绍了 Python 字典中设置默认值的几种方法:1. 使用 get
方法获取键值对,如果键不存在则返回默认值。2. 使用 setdefault
方法获取键值对,如果键不存在则返回默认值并将其添加到字典中。3. 使用 collections.defaultdict
自动为不存在的键提供默认值。4. 使用 lambda
函数作为工厂函数生成更复杂的默认值。5. 通过一个实战案例展示了如何使用 collections.defaultdict
统计单词出现次数。
好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、转发、在看吧!
付费合集推荐
文末福利
公众号消息窗口回复“编程资料”,获取Python编程、人工智能、爬虫等100+本精品电子书。