当前位置: 首页 > news >正文

Python 字典:dic = {} 和 dic = defaultdict(list)之间的区别

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 可以使代码更简洁,且不需要手动处理缺失的键。这在处理复杂的数据结构时尤其有用。

http://www.lryc.cn/news/257266.html

相关文章:

  • 绘图 Seaborn 10个示例
  • airserver mac 7.27官方破解版2024最新安装激活图文教程
  • 文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑移动式储能调度的配电网灾后多源协同孤岛运行策略》
  • Spring Boot 优雅地处理重复请求
  • TailwindCSS 多主题色配置
  • Vue3:表格单元格内容由:图标+具体内容 构成
  • 【项目日记(一)】高并发内存池项目介绍
  • 4-Docker命令之docker commit
  • RabbitMQ学习笔记10 综合实战 实现新商家规定时间内上架商品检查
  • Project Euler 865 Triplicate Numbers(线性dp)
  • 计算机网络测试题第二部分
  • linux 15day apache apache服务安装 httpd服务器 安装虚拟主机系统 一个主机 多个域名如何绑定
  • Linux和Windows环境下如何使用gitee?
  • Docker安装教程
  • 【PWN】学习笔记(二)【栈溢出基础】
  • 02-Nacos和Eureka的区别与联系
  • 常见的Linux系统版本
  • 基于JavaWeb+SSM+Vue微信小程序的科创微应用平台系统的设计和实现
  • 【Spring Boot 源码学习】ApplicationListener 详解
  • HCIP---RSTP/MSTP
  • 探索开源游戏的乐趣与无限可能 | 开源专题 No.47
  • springboot_3.2_freemark_基础环境配置
  • 【MySQL】MySQL 在 Centos 7环境安装教程
  • 有病但合理的 ChatGPT 提示语
  • this.$emit(‘update:isVisible‘, false)作用
  • CnetSDK .NET OCR Library SDK Crack
  • 基于Solr的全文检索系统的实现与应用
  • 【rabbitMQ】rabbitMQ控制台模拟收发消息
  • Java NIO, IO 整理
  • 【数据结构】——排序篇(下)