python 字典的基础及应用


当前版本:

  • Python 3.8.4

简介

    字典是一种无序的、可变的、键值对的数据结构。通常用于存储键值对,其中键是唯一的,值可以是任何类型的对象。它可以快速查找和访问数据,关联相互有关的信息,灵活地添加、修改和删除数据,以及存储标签或选项。字典的高效性和哈希映射使得它在各种场景下都非常有用。
    需要注意的是:字典中的键是无序的,所以无法通过索引来访问字典的元素。如果需要按特定顺序访问字典的元素,可以使用 sorted() 函数对键进行排序。

        

文章目录如下

1. 如何定义字典

什么是键、值呢?

定义标准的字典

2. 字典的操作方法

2.1. 添加/更新元素

2.2. 删除元素

2.3. 访问元素

2.4. 检查字典

3. 字典的实际应用

3.1. 配置文件

3.2. 循环遍历字典

3.3. 模拟数据库

3.4. 模拟缓存


        

1. 如何定义字典

python中的 "字典" 类似于我们平时在新华书店买的 "字典"。新华字典的作用是存储汉字、词语、成语等,我们一般通过目录去查找某个词语的详细解释。而python中的 "字典" 也是类似的用法,当需要对某些字段做解释时,那么利用字典来存储。比如 姓名:小李,年龄:18

D = {"name" : "小李", "age" : 18}

使用字典存储以后我们可以直接对某个字段取值(也就是对键取值)

        

什么是键、值呢?

在字典中,每个元素由2个值组成,前面的值称为 "键",后面的值称为 "值"

D = {"键1":"值1" , "键2":"值2"}# 使用冒号来分割键和值,组成的一个元素# 每个元素之间的用逗号来分割
  • 键(key)是数据的唯一标识符(不可变),用于唯一地标识字典中的每个元素。可以是字符串、数字或元组等数据类型。
  • 值(value)是与键相关联的数据。每个键在字典中都对应一个值,可以存储任意类型的数据。可以是字符串、数字、列表、元组、字典或其他复杂的数据类型。

当键和值组合在一起后就成为了一组数据,我们把这组数据统称为 "键值对"。

        

定义标准的字典

在python中可以使用两种方法来定义一个字典({ } 或者 dict

D = {}        # 定义一个空字典
D = dict()    # 定义一个空字典

        

当定义字典的内容较多时,我们一般采用换行的格式(便于阅读)

age = {"张三" : 22,"李四" : 18,"王五" : 21,"赵六" : 15
}

        

2. 字典的操作方法

  • 这一章节主要介绍字典的各种增删改查。

2.1. 添加/更新元素

我们一般通过键来添加一个值

D = {}
D["name"] = "小李"

        

键是唯一的,如果向已存在的键添加值则会修改原来的值

        

除了单个添加键值对以外,也可以使用 update 批量添加

# 定义一个字典
D = {'A': 1, 'B': 2, 'C': 3}# 批量添加键值对
D.update({'D': 4, 'E': 5})

如果键已存在则会被更新

        

键是唯一的,但值可以重复

D = {"小李":18 , "小张":18}

        

也能使用for循环批量添加

# 定义一个空字典
D = {}
# 循环0~4
for i in range(5):# 将键设为A{i},值设为i除以2取余D[f"A{i}"] = i % 2

        

还能将两个列表或元组组合成一个字典

# 定义2个列表
L1 = ["A", "B", "C"]
L2 = [1, 2, 3]# 将这2个列表转换为zip,再转换为字典
D = dict(zip(L1, L2))

如果两个列表或元组的数量不一致,那么只取最短的数量来组成字典

由于键是唯一的,当作为键的列表中存在相同的元素时,那么只取一个值作为键;作为值的列表只取最后一个。

相当于这种情况(已经添加了A,然后更新A)

D = {}
D["A"] = 1  # 添加到字典
D["A"] = 2  # 由于键相同,所以更新

        

2.2. 删除元素

在删除元素的方法中,常用 del 、pop 、clear

  • del:删除指定键的键值对
  • pop:删除指定键的键值对,并返回对应的值
  • clear:清空字典

【案例一】通过一个键来删除键值对

age = {"张三" : 22,"李四" : 18,"王五" : 21,"赵六" : 15
}
# 删除"李四"这个键值对
del age["李四"]

        

 【案例二】通过一个键来删除键值对(返回被删除的值)

age = {"张三" : 22,"李四" : 18,"王五" : 21,"赵六" : 15
}
# 删除"李四"这个键值对
age.pop("李四")

        

【案例三】清空字典

age = {"张三" : 22,"李四" : 18,"王五" : 21,"赵六" : 15
}
# 清空这个字典
age.clear()

也可以利用重新赋值的方式来清空

        

【案例四】不删除键,只删除值

age = {"张三" : 22,"李四" : 18,"王五" : 21,"赵六" : 15
}
# 将"李四"修改为空
age["李四"] = None

        

2.3. 访问元素

字典可以单独访问某个值,也可以访问全部键或值。

【案例一】通过键名访问值

age = {"张三" : 22,"李四" : 18,"王五" : 21,"赵六" : 15
}
# 访问张三的值
age["张三"]

        

【案例二】如果该键不存在返回默认值

age = {"张三" : 22,"李四" : 18,"王五" : 21,"赵六" : 15
}
# 如果不存在张四,则返回100
age.get("张四", 100)

        

【案例三】访问全部键

age = {"张三" : 22,"李四" : 18,"王五" : 21,"赵六" : 15
}
# 访问全部键
age.keys()

        

 【案例四】访问全部值

age = {"张三" : 22,"李四" : 18,"王五" : 21,"赵六" : 15
}
# 访问全部值
age.values()

        

 【案例五】访问全部键和值

age = {"张三" : 22,"李四" : 18,"王五" : 21,"赵六" : 15
}
# 访问全部键和值
age.items()

        

2.4. 检查字典

在操作业务时为防止数据被修改,一般需要先判断某个键是否存在,如果不存在则添加数据

D = {"A":1, "B":2}
# 判断是否存在为A的键
"A" in D

        

同样可以使用 in 检查某个值是否存在

D = {"A":1, "B":2}
# 判断是否存在为1的值
1 in D.values()

        

使用 if + and 判断多个键是否存在

D = {"A":1, "B":2, "C":3}
if "A" in D and "B" in D:print("A和B都存在")

        

检查该字典是否为空

D = {}
if len(D) == 0:print("该字典为空")

        

3. 字典的实际应用

3.1. 配置文件

字典可以为应用程序提供轻松的配置文件格式。字典中的键可以是配置项名称,值则可以是该配置项的值。

例如设定一些数据库的配置

db_conf = {"host": "localhost","port": 3306,"database": "test","user" : "root","password" : "123456"
}

在调用这些配置时可以直接通过字典读取

        

3.2. 循环遍历字典

循环遍历也是字典最常用的方法之一,介绍几种实用的:

【案例一】遍历键

db_conf = {"host": "localhost","port": 3306,"database": "test","user" : "root","password" : "123456"
}
# 遍历所有的键
for key in db_conf:print(f"当前的键为:{key}")

        

 【案例二】遍历值 values()

db_conf = {"host": "localhost","port": 3306,"database": "test","user" : "root","password" : "123456"
}
# 遍历所有的值
for value in db_conf.values():print(f"当前的值为:{value}")

        

 【案例三】遍历所有的键和值 items()

db_conf = {"host": "localhost","port": 3306,"database": "test","user" : "root","password" : "123456"
}
# 遍历所有的值
for key,value in db_conf.items():print(f"当前的键为:{key},当前的值为:{value}")

        

3.3. 模拟数据库

  • 字典可以存储表的行数据,将键作为列名,值作为单元格的值。这对于小型应用很有帮助。

使用字典定义一张员工表

staff = {# id号  姓名            年龄        工资1: {'name': '张三', 'age': 25, 'salary': 8000},2: {'name': '李四', 'age': 30, 'salary': 7000},3: {'name': '王五', 'age': 35, 'salary': 15000},
}

添加一个员工信息

staff[4] = {'name': '赵六', 'age': 27, 'salary': 9000}

        

查询全部员工信息

for key,value in staff.items():print(f"id: {key}, message: {value}")

        

查询薪资大于8000的员工信息

for key,value in staff.items():if value['salary'] > 8000:print(f"id: {key}, message: {value}")

        

查询id为3员工的薪资

print(staff[3]['salary'])

for key,value in staff.items():if key == 3:print(value['name'], ':', value['salary'])

        

3.4. 模拟缓存

使用字典来缓存函数计算结果,以允许后续的函数调用更快地执行。这对于需要重复计算的函数和大量数据时非常有用

# 创建一个空字典作为缓存
cache = {}def power_operation(x):'''封装一个幂运算的函数'''# 检查结果是否已经在缓存中if x in cache:# 如果在缓存中,直接返回缓存中的结果return cache[x]# 如果结果不在缓存中,进行计算result = x ** 2# 将结果保存到缓存中cache[x] = x ** 2return result# 调用函数
print(power_operation(3))    # 未缓存
print(power_operation(3))    # 已缓存
print(power_operation(6))    # 未缓存

        

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

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

相关文章

QT+OSG/osgEarth编译之七十六:glsl+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_glsl)

目录 1、osgdb_glsl介绍 2、文件分析 3、pro文件 4、编译实践 1、osgdb_glsl介绍 通过osgdb_glsl,osg能方便地读取glsl着色语言,从而为三维场景的渲染提供支撑。 GLSL(OpenGL Shadi

Day03

今日任务 链表理论基础203.移除链表元素707.设计链表206.反转链表 链表理论基础 1)单链表 单链表中的指针域只能指向节点的下一个节点 2)双链表 双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个…

k8s云原生环境搭建笔记——第二篇

目录 1、使用普通方式安装prometheus和grafana1.1、安装kube-state-metrics容器1.1.1、下载并修改yaml文件1.1.2、导入kube-state-metrics镜像1.1.3、执行yaml文件目录 1.2、安装node-exploer1.2.1、创建名称空间prometheus1.2.2、执行yaml 1.3、安装prometheus1.3.1、创建集群…

QT上位机开发(动画效果)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 不管是仿真,还是对真实环境的一比一模拟,动画都是非常好的一种呈现方式。目前在qt上面,实现动画主要有两种方法…

js(JavaScript)数据结构之堆(Heap)

什么是数据结构? 下面是维基百科的解释: 数据结构是计算机存储、组织数据的方式。数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装。 我们每天的编码中都会…

Linux scp命令 服务器之间通讯

目录 一. scp命令简介二. 本地服务器文件传输到远程服务器三. 本地服务器文件夹传输到远程服务器 一. scp命令简介 scp(Secure Copy Protocol)是用于在Unix或Linux系统之间安全地复制文件或目录的命令。 它使用SSH(Secure Shell)…

Java基础-OJ

Java基础-OJ Java面向对象程序设计OJ题目 目录 Java基础-OJJava基础-回文数Java基础-计算奇数和Java基础-计算素数Java基础-设计分段函数Java数组-歌手打分Java数组-实现冒泡排序Java继承-类的继承Java类的组合-类的组合Java类及对象-类方法使用Java面向对象-编写汽车类Java面向…

如何通过Burp Suite专业版构建CSRF PoC

Burp Suite是一款强大的渗透测试利器&#xff0c;可以利用它来高效的执行渗透攻击&#xff0c;接下来介绍如何通过Burp Suite Pro来构建CSRF PoC。 在Bupr中找到拦截的请求&#xff0c;右键选择Engagement tools > Generate CSRF PoC 利用CSRF PoC生成器自动生成HTML <h…

MOJO语言的诞生

文章目录 背景目标现状 背景 传统的编译器技术如LLVM和GCC并不适合现有深度学习编程语言的发展迭代&#xff0c;无法完全支持现代芯片架构。如今&#xff0c;专用机器学习加速器的标准技术是MLIR。MLIR是一个相对较新的开源编译器基础架构&#xff0c;最初由Google&#xff08…

imgaug库指南(23):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

四、MySQL安装失败问题和可视化工具连接MySQL8问题

目录 安装问题1&#xff1a;无法打开MySQL8.0软件安装包&#xff1f; 安装问题2&#xff1a;需要C库 安装问题3&#xff1a;丢失MSVCP140.dll 可视化工具连接MySQL8问题 安装问题1&#xff1a;无法打开MySQL8.0软件安装包&#xff1f; 在运行MySQL8.0软件安装包之前&#xf…

江科大STM32 下

目录 ADC数模转换器DMA直接存储器存取USART串口9-2 串口发送接受9-3 串口收发HEX数据包 I2CSPI协议10.1 SPI简介W25Q64简介10.3 SPI软件读写W25Q6410.4 SPI硬件读写W25Q64 BKP、RTC11.0 Unix时间戳11.1 读写备份寄存器BKP11.2 RTC实时时钟 十二、PWR12.1 PWR简介12.2 修改主频1…

精品量化公式——“区域突破”,应对当下行情较好的主图看盘策略

不多说&#xff0c;直接上效果如图&#xff1a; ► 日线表现 代码评估 技术指标代码评估&#xff1a; VAR1, VAR2, VAR3&#xff1a;这些变量是通过指数移动平均&#xff08;EMA&#xff09;计算得出的。EMA是一种常用的技术分析工具&#xff0c;用于平滑价格数据并减少市场“…

Linux/Traverxec

Enumeration nmap 使用nmap快速扫描目标&#xff0c;发现对外开放了22和80&#xff0c;第一个问题就是问80端口运行的是什么服务&#xff0c;针对这两个端口扫描对应的详细信息后就能得到答案 Nostromo 从nmap的扫描结果可以看到&#xff0c;目标开启了80端口&#xff0c;且…

c++关键字const

C中的const是一种常量修饰符。在变量、函数参数和成员函数中使用const可以限制其对数据的修改。 const修饰的数据在定义时必须进行初始化&#xff0c;且不能被修改&#xff0c;因此使用const可以提高代码的安全性和可读性。在C中&#xff0c;const修饰的成员函数表示该函数保证…

《计算思维导论》笔记:10.2 什么是数据库与数据库系统?

《大学计算机—计算思维导论》&#xff08;战德臣 哈尔滨工业大学&#xff09; 《10.2 什么是数据库与数据库系统&#xff1f;》 数据库 简单来讲&#xff0c;数据库就是相互有关联关系的数据的集合。 一个表聚集了具有相同结构类型的若干个对象一行数据反映了某一对象的相关…

Leetcode3002. 移除后集合的最多元素数

Every day a Leetcode 题目来源&#xff1a;3002. 移除后集合的最多元素数 解法1&#xff1a;贪心 可以将数组去重后分为三个部分&#xff1a;nums1 独有的&#xff0c;nums2 独有的&#xff0c;nums1 与 nums2 共有的。 求集合 S 时&#xff1a; 先选择两个数组独有的。…

(七)Java 分支结构 —— if...else、switch

目录 一. 前言 二. if 分支 2.1. if 语句 2.2. if...else 语句 2.3. if...else if...else 语句 2.4. 嵌套的 if…else 语句 三. switch 分支 四. 课后习题 一. 前言 Java 中的分支结构是程序控制流的重要组成部分&#xff0c;它们允许程序根据特定条件执行不同的代码块…

JVM:双亲委派机制类加载器

JVM&#xff1a;双亲委派机制 1. 例子2. 类加载器总结3. 类加载过程4. 双亲委派模型的执行流程&#xff1a;5. 双亲委派模型的好处 1. 例子 Java运行时环境有一个java.lang包&#xff0c;里面有一个ClassLoader类 我们自定义一个String类在java.lang包下&#xff0c;下面的…

C#编程-使用事件

使用事件 事件是一个动作或发生的事情,例如:鼠标点击、按键、鼠标移动或系统产生的通知。应用程序可以在事件发生的时候做出响应。通知的一个示例是中断。事件是对象发生的消息以表示事件的发生。事件是进程内通信的有效方法。它们对对象时有用的,因为它们标识了单个状态改…