【Python】字典

在这里插入图片描述

个人主页:GUIQU.
归属专栏:Python

在这里插入图片描述

文章目录

  • 1. 字典概述
  • 2. 字典的创建与初始化
    • 2.1 直接使用花括号创建
    • 2.2 使用 `dict()` 构造函数创建
    • 2.3 字典推导式创建
  • 3. 字典的基本操作
    • 3.1 访问字典中的值
    • 3.2 修改和添加键值对
    • 3.3 删除键值对
  • 4. 字典的遍历
    • 4.1 遍历键
    • 4.2 遍历值
    • 4.3 遍历键值对
  • 5. 字典的常用方法
    • 5.1 `update()` 方法
    • 5.2 `setdefault()` 方法
    • 5.3 `clear()` 方法
  • 6. 字典的嵌套
    • 6.1 字典嵌套字典
    • 6.2 字典嵌套列表
  • 7. 字典的应用场景
    • 7.1 数据缓存
    • 7.2 统计字符频率
    • 7.3 配置管理
  • 8. 字典的性能考虑
    • 8.1 查找性能
    • 8.2 内存占用
    • 8.3 排序问题

正文

1. 字典概述

在 Python 里,字典(Dictionary)是一种极为重要且强大的数据结构,它属于可变容器模型,可存储任意数量的 Python
对象。字典以键 - 值对(key - value
pairs)的形式组织数据,每个键必须是唯一的,而值可以是任意类型的数据,包括数字、字符串、列表、元组,甚至是其他字典。这种数据结构在处理具有映射关系的数据时表现出色,能够高效地通过键来快速查找对应的值。

字典的独特价值
字典的独特之处在于其基于哈希表(Hash Table)实现,这使得通过键来查找值的操作速度极快,平均时间复杂度为 O ( 1 ) O(1) O(1)。这一特性让字典在处理大规模数据的查找、统计和存储时具有显著优势,广泛应用于各种实际场景,如数据缓存、配置管理、数据库查询结果处理等。

2. 字典的创建与初始化

2.1 直接使用花括号创建

# 创建一个空字典
empty_dict = {}
print(empty_dict)# 创建包含键值对的字典
student = {"name": "Alice","age": 20,"major": "Computer Science"
}
print(student)

上述代码展示了两种使用花括号创建字典的方式。首先创建了一个空字典 empty_dict,然后创建了一个名为 student 的字典,其中包含了学生的姓名、年龄和专业等信息。

2.2 使用 dict() 构造函数创建

# 通过传入键值对参数创建字典
teacher = dict(name="Bob", age=35, subject="Math")
print(teacher)# 通过可迭代对象创建字典,可迭代对象中的每个元素应为包含两个元素的可迭代对象(如元组)
pairs = [("city", "New York"), ("country", "USA")]
address = dict(pairs)
print(address)

这里展示了使用 dict() 构造函数创建字典的两种常见方式。第一种是直接传入键值对参数,第二种是传入一个可迭代对象,该可迭代对象中的每个元素都是一个包含两个元素的可迭代对象,分别作为键和值。

2.3 字典推导式创建

# 从已有的数据中通过字典推导式创建字典
numbers = [1, 2, 3, 4]
squares = {x: x**2 for x in numbers}
print(squares)

字典推导式提供了一种简洁的方式来创建字典。上述代码通过对列表 numbers 中的每个元素进行平方运算,创建了一个键为原元素、值为其平方的字典 squares

3. 字典的基本操作

3.1 访问字典中的值

student = {"name": "Alice","age": 20,"major": "Computer Science"
}# 使用键来访问对应的值
name = student["name"]
print(name)# 使用 get() 方法访问值,当键不存在时可指定默认值
grade = student.get("grade", "N/A")
print(grade)

可以使用方括号 [] 直接通过键来访问字典中的值,但如果键不存在会引发 KeyError 异常。而 get() 方法则更为安全,当键不存在时,它会返回指定的默认值(若未指定则返回 None)。

3.2 修改和添加键值对

student = {"name": "Alice","age": 20,"major": "Computer Science"
}# 修改已有键的值
student["age"] = 21
print(student)# 添加新的键值对
student["grade"] = "A"
print(student)

直接使用方括号 [] 并结合赋值语句,既可以修改已有键对应的值,也可以添加新的键值对。如果键已经存在,赋值操作会更新该键对应的值;如果键不存在,则会创建一个新的键值对。

3.3 删除键值对

student = {"name": "Alice","age": 20,"major": "Computer Science"
}# 使用 del 语句删除指定键的键值对
del student["major"]
print(student)# 使用 pop() 方法删除指定键的键值对,并返回该键对应的值
age = student.pop("age")
print(age)
print(student)# 使用 popitem() 方法随机删除并返回一个键值对(在 Python 3.7 及以后版本中,按插入顺序删除最后一个)
item = student.popitem()
print(item)
print(student)

del 语句可以直接删除指定键的键值对。pop() 方法不仅能删除指定键的键值对,还会返回该键对应的值。popitem() 方法则用于随机删除并返回一个键值对(在 Python 3.7 及以后版本中,按插入顺序删除最后一个)。

4. 字典的遍历

4.1 遍历键

student = {"name": "Alice","age": 20,"major": "Computer Science"
}# 使用 keys() 方法遍历键
for key in student.keys():print(key)# 直接遍历字典时,默认遍历键
for key in student:print(key)

keys() 方法会返回一个包含字典所有键的视图对象,可用于遍历键。实际上,直接对字典进行遍历操作时,默认就是遍历其键。

4.2 遍历值

student = {"name": "Alice","age": 20,"major": "Computer Science"
}# 使用 values() 方法遍历值
for value in student.values():print(value)

values() 方法会返回一个包含字典所有值的视图对象,通过该对象可以遍历字典中的所有值。

4.3 遍历键值对

student = {"name": "Alice","age": 20,"major": "Computer Science"
}# 使用 items() 方法遍历键值对
for key, value in student.items():print(f"Key: {key}, Value: {value}")

items() 方法会返回一个包含所有键值对的视图对象,每个键值对以元组的形式呈现。通过解包元组,可以方便地同时遍历键和值。

5. 字典的常用方法

5.1 update() 方法

dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}# 使用 update() 方法将 dict2 中的键值对更新到 dict1 中
dict1.update(dict2)
print(dict1)

update() 方法用于将另一个字典中的键值对更新到当前字典中。如果有相同的键,会用新字典中的值覆盖原字典中的值;如果是新的键,则会添加到原字典中。

5.2 setdefault() 方法

student = {"name": "Alice","age": 20
}# 使用 setdefault() 方法获取键对应的值,如果键不存在则设置默认值并返回
major = student.setdefault("major", "Undecided")
print(major)
print(student)

setdefault() 方法用于获取指定键对应的值。如果键存在,直接返回该值;如果键不存在,则会将该键和指定的默认值添加到字典中,并返回默认值。

5.3 clear() 方法

student = {"name": "Alice","age": 20,"major": "Computer Science"
}# 使用 clear() 方法清空字典
student.clear()
print(student)

clear() 方法用于清空字典中的所有键值对,使字典变为空字典。

6. 字典的嵌套

6.1 字典嵌套字典

# 一个班级的学生信息,每个学生信息以字典形式存储在班级字典中
classroom = {"student1": {"name": "Alice","age": 20,"major": "Computer Science"},"student2": {"name": "Bob","age": 21,"major": "Mathematics"}
}# 访问嵌套字典中的值
print(classroom["student1"]["name"])

字典可以嵌套其他字典,形成复杂的数据结构。通过多级键的访问,可以获取嵌套字典中的具体值。

6.2 字典嵌套列表

# 一个学生的课程成绩信息,课程成绩以列表形式存储在学生字典中
student = {"name": "Alice","grades": [85, 90, 78]
}# 访问嵌套列表中的值
print(student["grades"][1])

字典也可以嵌套列表,这种结构适合存储一个键对应多个值的情况。通过键和列表索引的组合,可以访问嵌套列表中的具体元素。

7. 字典的应用场景

7.1 数据缓存

# 模拟一个简单的数据缓存
cache = {}def get_data(key):if key in cache:return cache[key]# 模拟从数据库或其他数据源获取数据data = f"Data for {key}"cache[key] = datareturn data# 第一次获取数据
result1 = get_data("item1")
print(result1)# 第二次获取相同数据,直接从缓存中获取
result2 = get_data("item1")
print(result2)

字典可用于实现简单的数据缓存机制。当需要频繁获取相同的数据时,先检查字典中是否已存在该数据,如果存在则直接返回,避免重复的计算或数据查询操作,提高程序的性能。

7.2 统计字符频率

text = "hello world"
char_frequency = {}for char in text:if char in char_frequency:char_frequency[char] += 1else:char_frequency[char] = 1print(char_frequency)

字典可以方便地用于统计文本中字符的出现频率。通过遍历文本中的每个字符,将字符作为键,出现次数作为值,不断更新字典中的统计信息。

7.3 配置管理

# 模拟一个应用程序的配置信息
config = {"database": {"host": "localhost","port": 3306,"username": "root","password": "password"},"app": {"debug": True,"timeout": 10}
}# 访问配置信息
db_host = config["database"]["host"]
print(db_host)

在实际开发中,字典常用于存储和管理应用程序的配置信息。通过将配置信息组织成字典形式,可以方便地进行读取和修改操作。

8. 字典的性能考虑

8.1 查找性能

字典基于哈希表实现,在大多数情况下,查找操作的平均时间复杂度为 O ( 1 ) O(1) O(1),这使得字典在处理大规模数据的查找时非常高效。但在极端情况下,如哈希冲突严重时,查找性能可能会下降。

8.2 内存占用

字典需要额外的内存来维护哈希表结构,因此在存储大量数据时,内存占用相对较高。同时,随着键值对的插入和删除,字典可能会进行动态扩容和缩容操作,这也会对内存使用产生影响。

8.3 排序问题

字典本身是无序的(在 Python 3.7 及以后版本中,字典会保持插入顺序)。如果需要对字典进行排序,通常需要将字典的键或值提取出来,转换为列表后再进行排序操作。

student = {"name": "Alice","age": 20,"major": "Computer Science"
}# 按键排序
sorted_keys = sorted(student.keys())
for key in sorted_keys:print(f"Key: {key}, Value: {student[key]}")# 按值排序
sorted_items = sorted(student.items(), key=lambda item: item[1])
for key, value in sorted_items:print(f"Key: {key}, Value: {value}")

以上代码展示了如何对字典的键和键值对进行排序操作。对于键的排序,使用 sorted() 函数对 keys() 方法返回的视图对象进行排序;对于键值对的排序,使用 sorted() 函数并通过 key 参数指定排序的依据。

通过深入理解字典的创建、操作、方法、嵌套、应用场景以及性能特点,开发者可以在 Python 编程中更加灵活、高效地使用字典,解决各种实际问题。

结语
感谢您的阅读!期待您的一键三连!欢迎指正!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/69533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32系统架构介绍

STM32系统架构 1. CM3/4系统架构2. CM3/4系统架构-----存储器组织结构2.1 寄存器地址映射(特殊的存储器)2.2 寄存器地址计算2.3 寄存器的封装 3. CM3/4系统架构-----时钟系统 STM32 和 ARM 以及 ARM7是什么关系? ARM 是一个做芯片标准的公司&#xff0c…

鸿蒙NEXT开发-发布三方库

开发一个三方库 如需发布一个 har 包,必须包含 oh-package.json5、README.md,CHANGELOG.md 和 LICENSE 四个文件,若文件缺失,会导致上架至中心仓失败。 HAR(Harmony Archive)是静态共享包,可以…

CSS 实现下拉菜单效果实例解析

1. 引言 在 Web 开发过程中,下拉菜单是一种常见且十分实用的交互组件。很多前端教程都提供过简单的下拉菜单示例,本文将以一个简洁的实例为出发点,从 HTML 结构、CSS 样式以及整体交互逻辑三个层面进行详细解析,帮助大家理解纯 C…

半导体制造工艺讲解

目录 一、半导体制造工艺的概述 二、单晶硅片的制造 1.单晶硅的制造 2.晶棒的切割、研磨 3.晶棒的切片、倒角和打磨 4.晶圆的检测和清洗 三、晶圆制造 1.氧化与涂胶 2.光刻与显影 3.刻蚀与脱胶 4.掺杂与退火 5.薄膜沉积、金属化和晶圆减薄 6.MOSFET在晶圆表面的形…

微信小程序如何使用decimal计算金额

第三方库地址:GitHub - MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript 之前都是api接口走后端计算,偶尔发现这个库也不错,计算简单,目前发现比较准确 上代码 导入js import Decimal from ../../uti…

安卓开发,底部导航栏

1、创建导航栏图标 使用系统自带的矢量图库文件,鼠标右键点击res->New->Vector Asset 修改 Name , Clip art 和 Color 再创建一个 同样的方法再创建四个按钮 2、添加百分比布局依赖 app\build.gradle.kts 中添加百分比布局依赖,并点击Sync Now …

前后端服务配置

1、安装虚拟机(VirtualBox或者vmware),在虚拟机上配置centos(选择你需要的Linux版本),配置如nginx服务器等 1.1 VMware 下载路径Sign In注册下载 1.2 VirtualBox 下载路径https://www.virtualbox.org/wiki/Downloads 2、配置服…

亲身经历!!解决fatal: unable to access ‘https://~.git/‘: Failed to connect to github.com ····

最近学着用GitBash,发现上来gitclone 就报错。由于我是纯小白,所以试了比较多次,终于成功了。 首先我试了一下关闭梯子,发现还是不行。上网搜,说是代理问题,可我也不知道啥叫代理,反正大概意思就是电脑连通…

TCP传输层协议

TCP 全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传 输进行一个详细的控制。 对于TCP的学习主要就是要知道TCP协议报头之中各个字段的作用 除了数据之外总共报头加起来是20个字节 16位源端口号与目的端口号 这是最容易理解的两…

正则引入store中的modules文件

正则引入store中的modules文件 // index.js import { createStore } from vuex;const modulesFiles require.context(./modules, true, /\.ts|js$/); const modules modulesFiles.keys().reduce((modules1, modulePath) > {const moduleName modulePath.replace(/^\.\/(.…

127,【3】 buuctf [NPUCTF2020]ReadlezPHP

进入靶场 吓我一跳 查看源码 点击 审计 <?php// 定义一个名为 HelloPhp 的类&#xff0c;该类可能用于执行与日期格式化相关的操作 class HelloPhp {// 定义一个公共属性 $a&#xff0c;用于存储日期格式化的模板public $a;// 定义一个公共属性 $b&#xff0c;用于存储…

如何在浏览器中搭建开源Web操作系统Puter的本地与远程环境

文章目录 前言1.关于Puter2.本地部署Puter3.Puter简单使用4. 安装内网穿透5.配置puter公网地址6. 配置固定公网地址 前言 嘿&#xff0c;小伙伴们&#xff01;是不是每次开机都要像打地鼠一样不停地点击各种网盘和应用程序的登录按钮&#xff0c;感觉超级麻烦&#xff1f;更让…

产品详情页中 品牌官网详情 对应后端的字段是 detail

文章目录 1、在这个Vue代码中&#xff0c;品牌官网详情 对应后端的字段是 detail2、品牌官网详情 功能相关的代码片段3、export const productSave (data: any) >4、ProductController5、ProductDto 类6、ProductApiService 1、在这个Vue代码中&#xff0c;品牌官网详情 对…

51单片机(国信长天)矩阵键盘的基本操作

在CT107D单片机综合训练平台上&#xff0c;首先将J5处的跳帽接到1~2引脚&#xff0c;使按键S4~S19按键组成4X4的矩阵键盘。在扫描按键的过程中&#xff0c;发现有按键触发信号后(不做去抖动)&#xff0c;待按键松开后&#xff0c;在数码管的第一位显示相应的数字:从左至右&…

VSCode + Continue 实现AI编程助理

安装VS Code 直接官网下载安装&#xff0c;反正是免费的。 安装VS插件Continue 直接在插件市场中搜索&#xff0c; Continue&#xff0c;第一个就是了。 配置Chat Model 点击Add Chat model后进行选择&#xff1a; 选择Ollama后&#xff0c;需要点击下面的config file : 由于…

机器学习之数学基础:线性代数、微积分、概率论 | PyTorch 深度学习实战

前一篇文章&#xff0c;使用线性回归模型逼近目标模型 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课&#xff1a;引领人工智能新时代【梗直哥瞿炜】 线性代数、微积分、概率论 …

BS架构(笔记整理)

楔子.基本概念 1.在网络架构中&#xff1a; 服务器通常是集中式计算资源&#xff0c;负责处理和存储数据&#xff1b;客户机是请求这些服务的终端设备&#xff0c;可能是个人电脑或移动设备&#xff1b;浏览器则是客户机上用来与服务器交互的工具&#xff0c;负责展示网页内容…

云消息队列 ApsaraMQ Serverless 演进:高弹性低成本、更稳定更安全、智能化免运维

如今&#xff0c;消息队列已成为分布式架构中不可或缺的关键服务&#xff0c;为电商、物联网、游戏和教育等行业&#xff0c;提供了异步解耦、集成、高性能和高可靠的核心价值。 过去一年&#xff0c;我们发布了云消息队列 ApsaraMQ 全系列产品 Serverless 化&#xff0c;面向…

python学opencv|读取图像(六十)先后使用cv2.erode()函数和cv2.dilate()函数实现图像处理

【1】引言 前序学习进程中&#xff0c;先后了解了使用cv2.erode()函数和cv2.dilate()函数实现图像腐蚀和膨胀处理的效果&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;五十八&#xff09;使用cv2.erode()函数实现图像腐蚀处理-CSDN博客 pytho…

apache-poi导出excel数据

excel导出 自动设置宽度&#xff0c;设置标题框&#xff0c;设置数据边框。 excel导出 添加依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>…