09. 字典

一、什么是字典

  在 Python 中,字典(dictionary)是一系列 键值对。每个键都与一个值关联,可以使用键来访问与之关联的值。字典中的 元键 只能是 不可变类型 的数据类型,也就是 可哈希类型。与键相关的值可以是数字、字符串、列表 乃至字典等。事实上,可将任意的 Python 对象用作字典的值。

二、字典的创建、删除和访问

2.1、字典的创建

【1】、使用 {} 创建字典

  在 Python 中,字典用放在方括号 “{}” 中的一系列键值对表示。键值对 包含两个互相关联的值。当你指定键时, Python 将返回与之关联的值。键和值之间用冒号分隔,而键值对之间用逗号分隔。

dictname = {key1:value1, key2:value2,...}
  • 字典的 key 可以是任意的不可变对象,一般我们都会使用字符串;
  • 字典的 value 可以是任意对象;

  我们可以通过 {} 来创建一个空字典:

person = {}
print(person)
print(type(person))

  在 Python 中,字典使用一对花括号将所有的内容(键值对)括起来,多个键值对之间用逗号分开。

person = {"name":"Sakura","age":10}
print(person)
print(type(person))

【2】、使用 dict() 函数创建字典

  我们还可以通过使用 dict() 函数来创建字典,通过这种方式创建的字典,它的 key 都是字符串对象。它的语法格式如下:

dictname = dict(key1=value1, key2=value2,...)
# 创建一个空字典
people = dict()
print(people)
print(type(people),end="\n\n")# 每一个参数都是一个键值对
person = dict(name="Sakura",age=10)
print(person)
print(type(person),end="\n\n")

  我们也可以将一个包含有双值子序列的序列转换为字典。双值序列就是指序列中只有两个值,例如:[1,2],(‘a’,3),“ab”。

student = dict([("name","Mikoto"),("age",14)])
print(student)
print(type(student),end="\n\n")info = [["name","egon"],["age",10],("gender","femal")
]
person = dict(info)
print(person)
print(type(person))

  字典的 key 是不能重复的,如果 key 出现重复,后面的 value 值会替换前面的 value 值。

person = {"name":"Sakura","age":10,"age":12}
print(person)

字典的 key 可以是任何不可变类型,比如整形、浮点型、字符串、元组(元组内的每个元素也必须是不可变的类型),并且所有的 key 都是唯一的,而 value 不限制类型;

2.2、字典的删除

  对于已经创建好的字典,不再使用时,可以使用 del 语句将其删除,语法格式如下:

del dictname

  在删除字典前,一定要保证的输入的字典对象是已经存在的,否则会出现以下错误:

NameError: name 'person' is not defined

2.3、访问字典的值

【1】、通过 key 访问字典的值

  在 Python 中,我们可以通过 key 来获取它所对应的 value 值,它的语法格式如下:

dictname[key]
person = {"name":"Sakura","age":10}
print(person["name"])
print(person["age"])

  如果使用的字典中不存在键会报以下错误:

KeyError: 'gender'

注意:字典不支持索引取值!

【2】、通过 get() 方法访问字典的值

  我们还可以通过 get(key[, default]) 来获取字典的值,如果获取的键在字典中不存在,默认会返回 None。get() 方法的第一个参数用于指定键,是必不可少的;第二个参数为当指定的键不存在时要返回的值,是可选的。它的语法格式如下:

dictname.get(key[, default])
person = {"name":"Sakura","age":10}
name = person.get("name");
print(name)# 如果获取的键在字典中不存在,会返回None
gender = person.get("gender")
print(gender)# 也可以指定一个默认值来作为第二个参数,这样获取不到值时将会返回默认值
gender = person.get("gender","secrecy")
print(gender)

2.4、遍历字典

  遍历字典,指的就是将字典中的所有元素取出来,在 Python 中提供了如下方法来遍历字典。

dictname.keys()     # 该方法会返回一个序列,序列中保存字典中所有的键
dictname.values()   # 该方法会返回一个序列,序列中保存字典中所有的值
dictname.items()    # 该方法会返回一个序列,序列中包含双值子序列,双值分别是字典中的key和value
person = {"name":"Sakura","age":10,"gender":'女',"birth":"4月1日"}# 取出的是字典的key
for item in person:print(item,': ',person[item])print()# 通过遍历keys()来获取字典中所有的键
for key in person.keys():print(key,':',person[key])print()# 通过遍历values()来获取字典中所有的值
for value in person.values():print(value)print()# 通过items()遍历字典
for key,value in person.items():print(key,':',value)

字典会保留定义时元素排列顺序。如果将字典打印出来或者遍历其元素,将发现元素的排列顺序与添加顺序相同;

三、字典中的增删改查

3.1、向字典中添加键值对

【1】、通过 key 向字典中添加键值对

  我们可以直接通过 key 向字典中新增一个 value,如果 key 存在则覆盖原有的 value。语法如下:

dictname[key] = value
person = {}
print(person)person["name"] = "Sakura"
print(person)

【2】、通过 setdefault() 方法向字典中添加键值对

  我们还可以通过 setdefault(key[,default]) 可以向字典中添加 key-value。如果 key 已经存在于字典中,则返回 key 的值,不会对字典做任何操作。如果 key 不存在,则向字典中添加这个 key,并设置 value。语法格式如下:

dictname.setdefault(key,value)
person = {"name":"Sakura","age":10}
print(person)result = person.setdefault("age",12)
print(result)
print(person)result = person.setdefault("gender",'女')
print(result)
print(person)

3.2、删除字典中的键值对

【1】、通过 key 删除字典中的键值对

  我们可以通过 del 关键字删除字典中的 key-value。语法格式如下:

del dictname[key]
person = {"name":"Sakura","age":10}
print(person)del[person["age"]]
print(person)

  如果删除不存在的 key,会抛出异常。

KeyError: 'gender'

【2】、通过 popitem() 方法删除字典中的键值对

  我们还可以使用 popitem() 删除字典中的一个键值对,一般都会删除最后一个键值对,删除之后,它会将 key-value 作为返回值返回,返回的是一个有两个元素的元组,第一个元素是删除的 key,第二个元素是删除的 value。语法格式如下:

dictname.popitem();
person = {"name":"Sakura","age":10,"gender":'女'}
print(person)result = person.popitem();
print(result)
print(person)

  当我们使用 popitem() 删除一个空字典时会报错。

KeyError: 'popitem(): dictionary is empty'

【3】、通过 pop() 方法删除字典中的键值对

  我们还可以使用 pop(key[,value]) 根据 key 删除字典中的 key-value,它会将被删除的 value 返回。语法格式如下:

dictname.pop(key[, default])
person = {"name":"Sakura","age":10,}
print(person)result = person.pop("age");
print(result)
print(person)

  如果删除不存在的 key,会抛出异常。

KeyError: 'gender'

  如果指定了默认值,再删除不存在的 key 时,不会报错,而是直接返回默认值。

person = {"name":"Sakura","age":10,}
print(person)result = person.pop("gender","secrecy");
print(result)
print(person)

3.3、修改字典的值

  我们可以通过键来修改字典的值,如果 key 存在则覆盖,不存在则添加,语法格式如下:

dictname[key] = value
person = {"name":"Sakura","age":10}
print(person)person["age"] = 12
print(person)person["gender"] = '女'
print(person)

3.4、查找字典中的键值对

【1】、使用 __contains__() 检查字典中是否包含指定的键

  在 Python 中,我们可以使用 __contains__() 来判断字典中是否包含指定的键。如果存在,返回 True,否则返回 False。

person = {"name":"Sakura","age":10}
print(person.__contains__("name"))

【2】、使用 in 关键字检查字典中是否包含指定的键

  在 Python 中,我们还可以使用 in 关键字检查字典中是否包含指定的键。如果存在,返回 True,否则返回 False。

key in dictname
person = {"name":"Sakura","age":10}
result = "name" in person
print(result)

  另外,在 Python 中,我们还可以使用 not in 关键字实现检查字典中是否不包含指定的键。如果不在,返回 True,否则返回 False。

key not in dictname
person = {"name":"Sakura","age":10}
result = "name" not in person
print(result)

3.5、清空字典

  我们可以使用 clear() 来清空字典。语法格式如下:

dictname.clear()
person = {"name":"Sakura","age":10}
print(person)
person.clear()
print(person)

四、字典的常用操作

【1】、获取字典中键值对的个数

  在 Python 中,可以使用 len() 获取字典中键值对的个数。语法格式如下:

len(dictname)
person = {"name":"Sakura","age":10}
print(len(person))
在 Python 中,提供了 copy() 对字典对象进行浅复制,复制以后的对象和原对象是独立的,修改一个不会影响另一个。浅复制只会简单的复制对象内部的值,如果值也是一个可变对象,这个可变对象不会被复制。语法如下:```python
dictname.copy()
persons1 = {"Sakura":{"name":"Sakura","age":10},"Mikoto":{"name":"Mikoto","age":14}}
persons2 = persons1.copy()print("persons1: ",persons1)
print("persons1 id: ",id(persons1))
print()print("persons2: ",persons2)
print("persons2 id: ",id(persons2))
print()persons2["Sakura"]["age"] = 12
print("persons1: ",persons1)
print("persons2: ",persons2)

【3】、字典的扩展

  我们还可以通过 update([other]) 将其它字典的 key-value 添加到当前字典中,如果有重复的 key,则后面的会替换当前的。语法格式如下:

dictname.update([other])
d1 = {'a':10,'b':11,'c':12}
d2 = {'d':13,'e':14,'f':15}
d1.update(d2)
print(d1)

五、字典推导式

  字典推导式将 for 循环和创建新元素的代码合并成一行,并自动追加新元素。要使用这种语法,首先指定一个描述性的字典名,然后指定一个左花括号,并定义一个表达式用于生成键,随后在跟的一个冒号,然会再定义一个表达式用于生成值。接下来,编写一个 for 循环,用于给变量表达式提供值,再加上右花括号。注意:这里的 for 语句末尾没有冒号。

dictname = {生成键的表达式 : 生成值的表达式 for 变量 in 可迭代对象 if 条件}
num = {x : x**2 for x in range(1,11)}
print(num)
print(type(num))
num = {x : x**2 for x in range(1,11) if x % 2 == 0}
print(num)
print(type(num))

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

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

相关文章

QT的exec函数

在Qt框架中,exec()方法是QDialog类(及其子类)的一个成员函数,用于以模态(modal)方式显示对话框。当exec()被调用时,它会启动一个局部的事件循环,这个循环会阻塞对对话框之外的其他窗…

Oracle对比表与表之间的结构

自己首先想到的就是,navicat有提供结构同步 但是有些时候情况不一样,比如我遇到的是连接不同,而且是互相同步,以最多的列的那个表为样 没有说一个固定的源 那么还可以通过导出表结构去另一个库中执行看是否报错,以此来判断结构的不同 但是我感觉有点儿麻烦 最后想到通过sql语…

数据结构与算法——N叉树(自学笔记)

本文参考 N 叉树 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 遍历 前序遍历:A->B->C->E->F->D->G后序遍历:B->E->F->C->G->D->A层序遍历:A->B->C->D->…

云计算之elastaicsearch logstach kibana面试题

1.ELK是什么? ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写 Elasticsearch:负责日志检索和储存 Logstash:负责日志的收集和分析、处理 Kibana:负责日志的可视化 这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,…

关于音频 DSP 的接口种类以及其应用场景介绍

在音频系统中,DSP(数字信号处理器)扮演着重要角色,通常会通过不同的接口与音频系统中的其他组件(如功放、扬声器、音频源等)进行连接。以汽车应用场景为例,以下是一些常见的接口类型分类及其介绍…

Linux操作系统学习---初识环境变量

目录 ​编辑 环境变量的概念: 小插曲:main函数的第一、二个参数 获取环境变量信息: 1.main函数的第三个参数 2.查看单个环境变量 3.c语言库函数getenv() 和环境变量相关的操作指令: 1.export---导出环境变量: 2.unse…

每日速记10道java面试题04

其他资料 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 每日速记10道java面试题03-CSDN博客 目录 一、什么是java的自动拆箱和装箱? 二、什么是java中的迭代器? 三、Java 运行时异常和编译时异常之间的区别是什么? 四、…

Python字典的用法(定义、增加、删除、修改、查询、遍历)

一.字典的介绍 dictionary(字典)是除了列表以外的 Python 中最灵活的数据类型。dict(字典)可以采用多个数据,通常用于存储描述一个物体的相关信息。 字典和列表最主要的区别是,字典是无序的对象集合&#x…

多视图几何中向量叉乘的矩阵转换 Matrix Transformation for Cross Product in MVG

Title: 多视图几何中向量叉乘的矩阵转换 Matrix Transformation for Cross Product in MVG 文章目录 I. 向量叉乘的矩阵转换恒等式II. 符号计算 Maxima 程序推导III. 推论和关联公式的说明1. 推论2. 应用于对极几何中基本矩阵推导3. 应用于基本矩阵与单应矩阵关系4. 与刚体运动…

支持多种快充协议的取电芯片,支持最大功率140W

前言 在快节奏的现代生活中,人们对于小家电的依赖日益加深,而随之而来的充电问题也日益凸显。传统的充电方式往往受限于电压、电流的限制,难以满足不同设备对电力的多样化需求。而PD快充协议的诞生,则为这一难题提供了全新的解决…

分页查询功能

EmployeeController /** * 员工分页查询 * * param employeePageQueryDTO * return */ GetMapping("/page") ApiOperation("员工分页查询") public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO) { log.info("…

深度学习读书笔记 绪论

深度学习是什么&#xff1f; 机器学习的分支。 深度学习问题也是指从有限样例中总结出一般的规律&#xff0c;应用在新的未知数据上的方法。 机器学习的三个基本要素 模型 机器学习任务首要弄明白的&#xff0c;也就是一个机器学习任务所面对的输入空间和输出空间。 输入…

“移门缓冲支架:为家庭安全加码”

在智能家居日益普及的今天&#xff0c;科技不仅改变了我们的生活方式&#xff0c;也提升了家居的安全。移门缓冲支架作为一项结合了现代技术的小型装置&#xff0c;正逐渐成为提升家庭安全的重要配件。它通过吸收门关闭时的冲击力、减缓关门速度以及减少噪音等多重功能&#xf…

npm error code ETIMEDOUT 简单排查

今天突然没到一个仓库的ius问题。改完之后想发布npm包 出现下面的场景 npm addUser npm adduser npm notice Log in on https://registry.npmjs.org/ Create your account at: https://www.npmjs.com/login?next/login/cli/12596c8b-ba4a-4763-8a97-215087d380c4 Press ENTER…

力扣96:不同的二叉搜索树

给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;1 卡…

小程序-基于java+SpringBoot+Vue的微信小程序养老院系统设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

Torchtune在AMD GPU上的使用指南:利用多GPU能力进行LLM微调与扩展

Torchtune on AMD GPUs How-To Guide: Fine-tuning and Scaling LLMs with Multi-GPU Power — ROCm Blogs 这篇博客提供了一份详细的使用Torchtune在AMD GPU上微调和扩展大型语言模型&#xff08;LLM&#xff09;的指南。Torchtune 是一个PyTorch库&#xff0c;旨在让您轻松地…

计算机网络--网络安全测试

问题 1 以下关于网络安全威胁发展的趋势的描述中错误的是___A_____。 答案&#xff1a; A云计算可以有效地防止网络攻击发生 B网络攻击、病毒与垃圾邮件是网络安全的三大公害 C网络攻击开始演变成某些国家或利益集团重要的政治、军事工具 D趋利性是当前网络攻击的主要特点 …

Java使用replaceAll替换时不使用正则表达式

前言 public String replaceAll(String regex, String replacement) {return Pattern.compile(regex).matcher(this).replaceAll(replacement);}在使用String.replaceAll() 方法时&#xff0c;由于入参时regex &#xff0c;而入参刚好是正则表达式的字符该怎么办&#xff1f;我…

【0346】Postgres内核 Startup Process 通过 signal 与 postmaster 交互实现 (5)

1. Startup Process 进程 postmaster 初始化过程中, 在进入 ServerLoop() 函数之前,会先通过调用 StartChildProcess() 函数来开启辅助进程,这些进程的目的主要用来完成数据库的 XLOG 相关处理。 如: 核实 pg_wal 和 pg_wal/archive_status 文件是否存在Postgres先前是否发…