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

【深入浅出 】——【Python 字典】——【详解】

目录

1. 什么是 Python 字典?

1.1 字典的基本概念

1.2 字典的用途

1.3 字典的优势

2. 字典的基本特点

2.1 键的唯一性

2.2 可变性

2.3 无序性

3. 如何创建字典?

3.1 使用 {} 符号

3.2 使用 dict() 工厂方法

3.3 使用 fromkeys() 方法

4. 字典的键和值的类型可以不同

注意事项:

5. 如何访问字典中的元素?

注意事项:

6. 遍历字典

注意事项:

7. 修改字典中的元素

7.1 新增元素

7.2 修改元素

注意事项:

8. 删除字典中的元素

8.1 使用 del 删除某个键值对

8.2 使用 clear() 方法清空整个字典

8.3 使用 pop() 函数删除键值对并获取到对应的值

注意事项:

9. 查找元素是否在字典中

注意事项:

10. 字典的比较

总结


 

专栏:python学习笔记 

Python 字典是一种强大而灵活的数据结构,非常适合存储和管理键值对。

1. 什么是 Python 字典?

Python 字典是一种映射类型的数据结构,其中的数据以键值对(key-value pairs)的形式存储。字典的实现基于哈希表,使得键值对的查找和操作速度非常快。

1.1 字典的基本概念

  • 键(Key): 键必须是唯一的,并且是可哈希的(如整数、字符串、元组等不可变类型)。这意味着两个不同的键不能具有相同的哈希值。
  • 值(Value): 值可以是任意类型,包括数字、字符串、列表、甚至是另一个字典。

小李很执着理解: 想象字典是一种超级便利的“查找表”,你可以通过独一无二的“名字”(键)快速找到对应的“内容”(值)。

1.2 字典的用途

字典在很多场景下都非常有用,例如:

  • 配置文件: 存储应用程序的配置参数。
  • 计数器: 统计元素出现的频率。
  • 缓存: 存储计算结果以避免重复计算。
  • 快速查找: 通过键快速访问数据。

1.3 字典的优势

  • 查找速度快: 由于字典基于哈希表实现,查找操作的平均时间复杂度为 O(1)。
  • 灵活性高: 字典的键和值可以是任意类型,提供了极大的灵活性。

2. 字典的基本特点

字典有几个重要的特点,使其在各种应用场景中非常有用。

2.1 键的唯一性

字典中的每个键必须是唯一的。如果试图插入一个重复的键,后者会覆盖前者。

a = {'x': 1, 'y': 2}
a['x'] = 3
print(a)
# 输出: {'x': 3, 'y': 2}

小李很执着理解: 字典就像一份购物清单,每个项目都有独特的名字,如果名字重复,新的会替换旧的。

2.2 可变性

字典是可变的,这意味着可以动态地增加、修改和删除键值对。

a = {'x': 1}
a['y'] = 2
print(a)
# 输出: {'x': 1, 'y': 2}

小李很执着理解: 你可以随时往购物清单里添加或删除项目。

2.3 无序性

在 Python 3.7 之前,字典中的元素没有顺序。从 Python 3.7 开始,字典按插入顺序保存键值对。

a = {'x': 1, 'y': 2, 'z': 3}
print(a)
# 输出: {'x': 1, 'y': 2, 'z': 3}

小李很执着理解: 虽然购物清单里项目的顺序不重要,但从 Python 3.7 开始,它会记住你添加项目的顺序。

3. 如何创建字典?

Python 提供了多种方式来创建字典:

3.1 使用 {} 符号

这是最常用的创建字典的方法:

a = {'x': 1, 'y': 2}
print(a)
# 输出: {'x': 1, 'y': 2}

小李很执着理解: 用大括号 {} 包裹一对对的名字和值,就能创建一个字典。

3.2 使用 dict() 工厂方法

适用于从其他数据结构(如元组列表)创建字典的情况:

a = dict([('x', 1), ('y', 2)])
print(a)
# 输出: {'x': 1, 'y': 2}

小李很执着理解: dict() 函数也能创建字典,只要提供成对的名字和值。

3.3 使用 fromkeys() 方法

用于创建包含指定键并且所有值相同的字典:

a = {}.fromkeys(('x', 'y'), 0)
print(a)
# 输出: {'x': 0, 'y': 0}

小李很执着理解: fromkeys() 方法创建的字典里所有的名字都有相同的值。

4. 字典的键和值的类型可以不同

在字典中,键和值的类型不需要相同。例如,可以有整数键和字符串值的组合:

a = {1: 'apple', 'b': 2.5}
print(a)
# 输出: {1: 'apple', 'b': 2.5}

注意事项:

  • 键必须是不可变类型(如整数、字符串、元组)。
  • 值可以是任何类型,包括列表和其他字典。

小李很执着理解: 字典里的名字和内容可以是任何类型,比如数字对应水果,字母对应小数。

5. 如何访问字典中的元素?

使用方括号 [] 可以直接访问字典中的值:

a = {'x': 10, 'y': 20}
print(a['x'])  # 输出: 10

注意事项:

  • 访问不存在的键会抛出 KeyError 错误。

可以使用 get() 方法避免 KeyError

value = a.get('z', '默认值')
print(value)  # 输出: 默认值

小李很执着理解: 用名字查找内容就像查字典,用 get() 方法可以避免找不到名字时报错。

6. 遍历字典

可以使用 for 循环遍历字典中的键和值:

a = {'x': 0, 'y': 0}
for key in a:print(key, a[key])
# 输出(顺序可能不同):
# x 0
# y 0

注意事项:

可以使用 items() 方法同时遍历键和值:

for key, value in a.items():print(key, value)

小李很执着理解: for 循环可以遍历字典里的所有名字和内容,用 items() 方法可以同时获取名字和内容。

7. 修改字典中的元素

使用方括号 [] 可以新增或修改字典元素:

7.1 新增元素

a = {}
a[1] = 100
print(a)  # 输出: {1: 100}

小李很执着理解: 用方括号 [] 给字典增加新元素。

7.2 修改元素

a[1] = 200
print(a)  # 输出: {1: 200}

注意事项:

使用 update() 方法可以批量更新字典:

a.update({'b': 300, 'c': 400})
print(a)  # 输出: {1: 200, 'b': 300, 'c': 400}

小李很执着理解: 用方括号 [] 修改字典里的内容,用 update() 方法一次更新多个内容。

8. 删除字典中的元素

8.1 使用 del 删除某个键值对

a = {1: 100}
del a[1]
print(a)  # 输出: {}

8.2 使用 clear() 方法清空整个字典

a = {1: 100, 2: 200}
a.clear()
print(a)  # 输出: {}

8.3 使用 pop() 函数删除键值对并获取到对应的值

a = {1: 100, 2: 200}
value = a.pop(1)
print(value)  # 输出: 100
print(a)      # 输出: {2: 200}

注意事项:

popitem() 方法可以删除并返回最后一个键值对(按插入顺序):

a = {1: 100, 2: 200}
key, value = a.popitem()
print(key, value)  # 输出: 2 200
print(a)           # 输出: {1: 100}

小李很执着理解: del 删除单个元素,用 clear() 清空字典,用 pop() 删除并获取元素内容。

9. 查找元素是否在字典中

可以使用 innot in 来判定一个键是否在字典中:

a = {'x': 10, 'y': 20}
print('x' in a)  # 输出: True
print('z' in a)  # 输出: False

注意事项:

  • in 操作符只检查键是否存在,不检查值。

小李很执着理解: in 判断字典里是否有某个名字。

10. 字典的比较

字典的比较操作符与序列不同。两个字典只有在键和值完全相同时才相等:

a = {'x': 1, 'y': 2}
b = {'x': 1, 'y': 2}
print(a == b)  # 输出: True

  • 注意事项:
    • 字典之间的大小关系不常用,因为字典是无序的。
    • 可以使用 ==!= 来比较字典。

小李很执着理解: == 比较字典是否相等,字典的大小关系通常不需要比较。

总结

Python 字典是一种非常灵活且高效的数据结构,适用于需要快速查找和存储键值对的场景。字典的强大功能使其成为 Python 编程中不可或缺的一部分。掌握字典的使用,可以大大提高代码的效率和可读性。

相关文章:

【深入浅出 】——【Python 字典】——【详解】

目录 1. 什么是 Python 字典? 1.1 字典的基本概念 1.2 字典的用途 1.3 字典的优势 2. 字典的基本特点 2.1 键的唯一性 2.2 可变性 2.3 无序性 3. 如何创建字典? 3.1 使用 {} 符号 3.2 使用 dict() 工厂方法 3.3 使用 fromkeys() 方法 4. 字…...

开发RpcProvider的发布服务(NotifyService)

1.发布服务过程 目前完成了mprpc框架项目中的以上的功能。 作为rpcprovider的使用者,也就是rpc方法的发布方 main函数如下: 首先我们init调用框架的init,然后启动一个provider,然后向provider上注册服务对象方法,即us…...

Suno: AI音乐创作的新时代

名人说:一点浩然气,千里快哉风。 ——苏轼 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是Suno?1、Suno2、应用场景二、如何使用Suno制作音乐?步骤1:注册并登录Suno平台步骤2:创建音乐项目步骤3:生成音乐片段三、Suno的影响很高兴你打开了…...

六西格玛项目实战:数据驱动,手机PCM率直线下降

在当前智能手机市场日益竞争激烈的背景下,消费者对手机质量的要求达到了前所未有的高度。PCM(可能指生产过程中的某种不良率或缺陷率)作为影响手机质量的关键因素,直接关联到消费者满意度和品牌形象。为了应对这一挑战&#xff0c…...

数据结构递归(01)汉诺塔经典问题

说明:使用递归时,必须要遵守两个限制条件: 递归存在限制条件,满⾜这个限制条件时,递归不再继续; 每次递归调⽤之后越来越接近这个限制条件; 1 汉诺塔(Hanoi Tower)经典…...

计算机专业课面试常见问题-计算机网络篇

目录 1. 计算机网络分为哪 5 层? 2. TCP 协议简述? 3. TCP 和 UDP 的区别?->不同的应用场景? 4. 从浏览器输入网址到显示页…...

HarmonyOS ArkUi ArkWeb加载不出网页问题踩坑

使用 使用还是比较简单的,直接贴代码了 别忘了配置网络权限 Entry Component struct WebPage {State isAttachController: boolean falseState url: string State title: string Prop controller: web_webview.WebviewController new web_webview.WebviewCont…...

微信换手机号了怎么绑定新手机号?

微信换手机号了怎么绑定新手机号? 1、在手机上找到并打开微信; 2、打开微信后,点击底部我的,并进入微信设置; 3、在微信设置账号与安全内,找到手机号并点击进入; 4、选择更换手机号&#xff0c…...

64.WEB渗透测试-信息收集- WAF、框架组件识别(4)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:63.WEB渗透测试-信息收集- WAF、框架组件识别(3)-CSDN博客 我们在…...

java.lang.LinkageError: 链接错误的正确解决方法,亲测有效,嘿嘿,有效

文章目录 问题分析报错原因解决思路解决方法(含代码示例)1. 检查类加载器2. 避免在运行时修改类定义3. 更新或修复 JVM4. 检查应用程序的依赖使用 Maven 检查依赖项使用 Gradle 检查依赖项 java.lang.LinkageError 是 Java 虚拟机在尝试链接类定义时发生…...

python最基础

基本的类 python最基础、最常用的类主要有int整形,float浮点型,str字符串,list列表,dict字典,set集合,tuple元组等等。int整形、float浮点型一般用于给变量赋值,tuple元组属于不可变对象&#…...

Python学习路线图(2024最新版)

这是我最开始学Python时的一套学习路线,从入门到上手。(不敢说精通,哈哈~) 一、Python基础知识、变量、数据类型 二、Python条件结构、循环结构 三、Python函数 四、字符串 五、列表与元组 六、字典与集合 最后再送给大家一套免费…...

66、基于长短期记忆 (LSTM) 网络对序列数据进行分类

1、基于长短期记忆 (LSTM) 网络对序列数据进行分类的原理及流程 基于长短期记忆(LSTM)网络对序列数据进行分类是一种常见的深度学习任务,适用于处理具有时间或序列关系的数据。下面是在Matlab中使用LSTM网络对序列数据进行分类的基本原理和流…...

RabbitMQ消息可靠性等机制详解(精细版三)

目录 七 RabbitMQ的其他操作 7.1 消息的可靠性(发送可靠) 7.1.1 confim机制(保证发送可靠) 7.1.2 Return机制(保证发送可靠) 7.1.3 编写配置文件 7.1.4 开启Confirm和Return 7.2 手动Ack(保证接收可靠) 7.2.1 添加配置文件 7.2.2 手动ack 7.3 避免消息重复消费 7.3.…...

88888

49615...

深度学习之激活函数

激活函数的公式根据不同的函数类型而有所不同。以下是一些常见的激活函数及其数学公式: Sigmoid函数: 公式:f(x)特性:输出范围在0到1之间,常用于二分类问题,将输出转换为概率值。但存在梯度消失问题&#…...

OpenStack开源虚拟化平台(一)

目录 一、OpenStack背景介绍(一)OpenStack是什么(二)OpenStack的主要服务 二、计算服务Nova(一)Nova组件介绍(二)Libvirt简介(三)Nova中的RabbitMQ解析 OpenS…...

C++ | Leetcode C++题解之第207题课程表

题目&#xff1a; 题解&#xff1a; class Solution { private:vector<vector<int>> edges;vector<int> indeg;public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {edges.resize(numCourses);indeg.resize(numCo…...

vue3中的自定义指令

全局自定义指令 假设我们要创建一个全局指令v-highlight&#xff0c;用于高亮显示元素。这个指令将接受一个颜色参数&#xff0c;并有一个可选的修饰符bold来决定是否加粗文本。 首先&#xff0c;在创建Vue应用时定义这个指令&#xff1a;&#xff08;这里可以将指令抽离成单…...

Postman接口测试工具的原理及应用详解(一)

本系列文章简介&#xff1a; 在当今软件开发的世界中&#xff0c;接口测试作为保证软件质量的重要一环&#xff0c;其重要性不言而喻。随着前后端分离开发模式的普及&#xff0c;接口测试已成为连接前后端开发的桥梁&#xff0c;确保前后端之间的数据交互准确无误。在这样的背景…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

2025-05-08-deepseek本地化部署

title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek&#xff1a;小白也能轻松搞定&#xff01; 如何给本地部署的 DeepSeek 投喂数据&#xff0c;让他更懂你 [实验目的]&#xff1a;理解系统架构与原…...