Python 字典:dic = {} 和 dic = defaultdict(list)之间的区别
2023-12-14 22:32:18
d = defaultdict(list) 和 d = {} 在Python中代表了两种不同类型的字典初始化方式,它们之间有几个关键的区别:
1、类型
- d = defaultdict(list):这里使用的是 collections 模块中的 defaultdict 类。它是一个字典的子类,提供了一个默认值(空列表),用于在字典中自动处理缺失的键值。
- d = {}:这是一个普通的Python字典,不会自动处理缺失的键值。
2、当访问不存在的键时:
- 在使用 defaultdict(list) 时,如果你尝试访问字典中不存在的键,defaultdict 会自动为该键创建一个新条目,并将默认值(这里是空列表 list)分配给这个键。
- 在普通字典 d = {} 中,如果你尝试访问一个不存在的键,Python会抛出一个 KeyError 异常。在这种情况下,需要在访问不存在的键时手动处理 KeyError,并初始化一个空列表。
3、用途
- defaultdict(list) 常用于需要将多个值分配给一个键的场景,例如在构建多值映射(如一对多的关系)时非常有用。
- 普通字典 d = {} 更适用于标准的键值对存储,其中每个键映射到一个单独的值。
4、代码
假设我们有一组数据,包含多个姓名和与每个姓名关联的一些数字。我们的目标是创建一个字典,其中每个姓名都映射到一个包含所有相关数字的列表。
- 使用 defaultdict(list)
from collections import defaultdict
# 初始化 defaultdict
names_dict = defaultdict(list)
# 添加数据
data = [('Anna', 1), ('Bob', 2), ('Anna', 5), ('Bob', 6), ('Cara', 7)]
for name, number in data:
names_dict[name].append(number)
# 输出结果
print(names_dict)
在这个例子中,当我们添加一个元组 (name, number) 到 names_dict 时,如果 name 还不在字典中,defaultdict 会自动为 name 创建一个新条目,并初始化一个空列表。然后 number 被追加到这个列表中。这避免了我们需要手动检查 name 是否已经存在于字典中。
- 使用普通字典 {}
# 初始化普通字典
names_dict = {}
# 添加数据
data = [('Anna', 1), ('Bob', 2), ('Anna', 5), ('Bob', 6), ('Cara', 7)]
for name, number in data:
if name not in names_dict:
names_dict[name] = [] # 如果键不存在,先创建空列表
names_dict[name].append(number)
# 输出结果
print(names_dict)
使用普通字典时,我们必须首先检查 name 是否已经存在于字典中。如果不存在,我们需要手动为这个键创建一个空列表,然后才能追加 number。这意味着需要更多的代码来处理缺失的键。
- 结果对比:
在这两个例子中,最终的 names_dict 将是相同的:
{'Anna': [1, 5], 'Bob': [2, 6], 'Cara': [7]}
但是,使用 defaultdict 可以使代码更简洁,且不需要手动处理缺失的键。这在处理复杂的数据结构时尤其有用。
文章来源:https://blog.csdn.net/s1_0_2_4/article/details/134914966
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!