python08-序列02-字典dict、集合set

一、字典(dict):可变数据类型

1-1、字典的特点

  • 字典是可变数据类型(list也是),具有增、删、改等一系列的操作;
  • 字典中的元素是无序的(hash)
  • key必须唯一,value可以重复
  • key要求是不可变序列
  • 多次对一个key放入value,后面的值会把前面的值冲掉。

这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。

 

1-2、字典的创建

1、使用花括号 {} 来创建一个字典,或者使用 dict() 函数 

字典的value可以是不同类型

2、使用zip函数创建字典

zip() 函数可以将多个可迭代对象(如列表、元组等)的元素进行配对,并返回一个迭代器,该迭代器会生成一个个由这些元素组成的元组。然后,你可以利用这个迭代器来创建一个字典。

如果 keys 和 values 列表的长度不一致zip() 函数会停止在最短的输入序列结束时。 

3、zip函数,同步迭代

【注意】:

输出结果不对!因为fruit是set集合,set集合是无序的,所以,每次运行,里面的元素顺序都是不一样的!

字典是属于序列的,所以,序列当中的函数,字典也能用! 

【回顾】:序列的函数

 

 

1-3、字典元素的取值

1-4、遍历字典

# 遍历键
for key in my_dict:
    print(key)

# 遍历值
for value in my_dict.values():
    print(value)

# 遍历键值对1
for key, value in my_dict.items():
    print(f"{key}: {value}")

# 遍历键值对2
for item in my_dict.items():
    print(item)

1-5、字典的相关操作

python中一切皆对象,每一个对象都有一个boolean值。

空列表 = 空元祖 = 空字典 = False

1-6、字典合并

使用 | 运算符、 update() 方法,来合并两个字典。

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

# 使用 | 运算符合并字典(Python 3.9+)
merged_dict = dict1 | dict2
print(merged_dict)  # 输出: {'a': 1, 'b': 3, 'c': 4}

# 使用 update() 方法合并字典
dict1.update(dict2)
print(dict1)  # 输出: {'a': 1, 'b': 3, 'c': 4}

 

1-7、字典生成式

1-8、dict 对比 list

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

二、集合(Set):可变数据类型

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

存储不可变数据类型。

集合是无序的,并且不支持索引和切片操作。集合的主要功能是进行集合运算,比如并集、交集、差集等。

2-1、集合的创建、删除

集合set也是序列的一种,所以,序列函数,集合也能使用。

集合的生成式 

2-2、集合的元素的添加、删除

1、添加

add() 方法可以向集合中添加元素。如果元素已经存在,则不会重复添加。

 

2、删除

使用 remove() 方法移除集合中的元素。如果元素不存在,则会抛出 KeyError

也可以使用 discard() 方法,如果元素不存在则不会抛出异常。

另外,可以使用 pop() 方法移除并返回集合中的一个随机元素(在Python 3.7+版本中,pop() 返回的是最后一个被添加的元素)

my_set = {1, 2, 3, 4}

my_set.remove(3)
print(my_set)  # 输出: {1, 2, 4}

# my_set.remove(5)  # 这行会抛出 KeyError

my_set.discard(4)
print(my_set)  # 输出: {1, 2}

element = my_set.pop()
print(element)  # 输出可能是 1 或 2,具体取决于实现
print(my_set)  # 输出: {剩下的那个元素}

2-3、集合的运算

 

判断子集和超集

使用 issubset() 和 issuperset() 方法来判断一个集合是否是另一个集合的子集或超集。

集合的其他方法

  • clear():清空集合中的所有元素。
  • copy():返回集合的一个浅拷贝。
  • update():更新集合,添加多个元素。
my_set = {1, 2, 3}

my_set.clear()
print(my_set)  # 输出: set()

my_set = {1, 2, 3}
copied_set = my_set.copy()
print(copied_set)  # 输出: {1, 2, 3}

my_set.update([4, 5, 6])
print(my_set)  # 输出: {1, 2, 3, 4, 5, 6}

2-4、集合的遍历操作

三、列表、元组、字典、集合的区别

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样。 

四、不可变对象

对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。

相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

五、可迭代对象

"可迭代对象"(iterable)指的是那些可以被遍历的对象,即你可以从中获取元素,直到遍历完整个对象。

更具体地说,可迭代对象实现了Python的__iter__()方法(该方法返回一个迭代器对象)或__getitem__()方法(该方法支持通过索引访问元素,并且当索引超出范围时引发IndexError异常)。不过,在大多数情况下,你只需要关注__iter__()方法,因为它更为常见且是迭代器协议的一部分。

在Python中,大多数内置的数据结构(如列表、元组、集合、字典、字符串等)都是可迭代的。

此外,任何实现了迭代器协议的对象也都是可迭代的。

迭代器(iterator)则是可迭代对象的一个特例,它不仅实现了__iter__()方法,还实现了__next__()方法。

当你想要遍历一个可迭代对象时,你通常会使用循环(如for循环)。在循环内部,Python会自动调用可迭代对象的__iter__()方法来获取一个迭代器,并通过迭代器的__next__()方法来获取每个元素,直到捕获到StopIteration异常为止(这标志着迭代的结束)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java项目】基于SpringBoot的【旅游管理系统 】

【Java项目】基于SpringBoot的【旅游管理系统 】 技术简介:本系统使用JAVA语言开发,采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介:(1)管理员功能:可以管理个人中心、用户管理、景区分…

UE5 跟踪能力的简单小怪

A、思路 1、用素材的骨骼网格体创建小怪BP,绑定新的小怪控制器。 2、控制器的事件开始时,获取玩家状态,指定AI小怪自动向玩家移动。 复杂的AI需要用强大功能如黑板、行为树。 而简单的AI则可以用简单方法实现,杀鸡不用牛刀。视…

渗透测试学习笔记(五)网络

一.IP地址 1. IP地址详解 ip地址是唯一标识,一段网络编码局域网(内网):交换机-网线-pcx.x.x.x 32位置2进制(0-255) IP地址五大类 IP类型IP范围A类0.0.0.0 到 127.255.255.255B类128.0.0.0 到191.255.25…

Windows 下 Anaconda的安装与配置 GPU 版

给之前的电脑安一下深度学习环境 判断是否有NVIDIA GPU Ctrl Shift Esc 打开任务管理器 带此字眼表示有 NVIDIA GPU 安装Anaconda anaconda 打开邮箱会看到下载链接 这里建议修改为其他盘,要不然下载的包和创建的环境都在C盘,占用空间 三个都打钩 取…

flutter --no-color pub get 超时解决方法

新建Flutter项目后,运行报错,需要执行pub get 点击Run ‘flutter pub get’ … … … 卡着,不动了,提示超时 是因为墙的问题 解决方案: 添加以下环境变量 变量名: PUB_HOSTED_URL 变量值: https://pub.flutter-io.cn …

Marin说PCB之POC电路layout设计仿真案例---06

我们书接上回啊,对于上面的出现原因我这个美女同事安娜说会不会你把POC电感下面的相邻两层的CUT_OUT的尺寸再去加大一些会不会变得更好呢?这个难道说是真的有用吗?小编我先自己算一卦看下结果。 本期文章我们就接着验证通过改善我们的单板POC…

Node.js 构建简单应用

在 Node.js 中构建一个简单应用通常包括以下几个步骤: 安装 Node.js设置项目目录初始化项目创建服务器并处理请求和响应 接下来,我们将一步步介绍如何用 Node.js 构建一个简单的 HTTP 应用程序。 1、安装 Node.js 首先确保系统上已安装 Node.js 和 n…

Cesium 无人机航线规划(航点航线)

航线规划实现定制航线,一键巡检功能 小镜头模拟的是此方向的拍照效果,觉得合适可以打个拍照印记 设置里可调控参数 保存后反显的样子,主要是为了区分航线

rfid标签打印开发指导

使用java连接斑马打印机,开发rfid标签打印功能 1.引用斑马打印机的SDKjar包 ZSDK_API.jar 将这个jar文件放到项目的lib目录下,没有就新建一个。 然后点击 File–Project Sreucture–Modules 点击加号 选择对应jar包即可 2.代码开发 1.打印机连接地址…

vue-office:Star 4.2k,款支持多种Office文件预览的Vue组件库,一站式Office文件预览方案,真心不错

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 vue-office 是一个支持多种文件格式(docx、excel、pdf、pptx)预览的Vue组件库,它不仅支持Vue2和Vue3,还…

Docker介绍、安装、namespace、cgroup、镜像-Dya 01

0. 容器简介 从生活上来说,容器是一种工具,可以装东西的工具,如衣柜、背包、行李箱等等。 从IT技术方面来说,容器是一种全新的虚拟化技术,它提高了硬件资源利用率,结合k8s还可以让企业业务快速横向扩容、业…

Kube-state-metrics 可观测性最佳实践

Kube-state-metrics 介绍 Kube-state-metrics 是 Kubernetes 生态系统中的一个开源项目,主要用来收集和报告集群中各种资源的实时状态信息。 工作原理 Kube-state-metrics 连接到 Kubernetes API 服务器,并公开一个 HTTP 端点,提供集群中各…

Pycharm配置Python开发环境

Pycharm配置Python开发环境 在之前的文章中,安装好了Pyhton和Pycharm。 打开Pycharm,如下图 配置完成之后,如下图所示:

scala中模式匹配的应用

package test34object test6 {case class Person(name:String)case class Student(name:String, className:String)// match case 能根据 类名和属性的信息,匹配到对应的类// 注意:// 1 匹配的时候,case class的属性个数要对上// 2 属性名不需…

PyQt5学习笔记

P95 绝对布局 绝对布局,使用move方法,操作坐标来控件控件的位置。 import sys from PyQt5.QtWidgets import *绝对布局,使用move方法,操作坐标来控件控件的位置。class MyWin(QWidget):def __init__(self):super().__init__()#…

Python3.13安装和配置

Python3.13安装和配置 一、Python的下载 点击下面的下载链接,下载需要的版本。以3.13版本为例。如下图所示: 3.13.0下载地址(windows)3.13.0下载地址(windows) 二、安装 下载完成后,双击安装文件。 <

探索Linux中的Zombie僵死进程

文章目录 探索Linux中的Zombie僵死进程什么是Zombie僵死进程&#xff1f;僵死进程的产生原因如何识别僵死进程&#xff1f;如何清理僵死进程&#xff1f;僵死进程对系统的影响总结 探索Linux中的Zombie僵死进程 在Linux系统中&#xff0c;进程管理是一个非常重要的主题&#x…

win11 C盘出现感叹号解决方法

出现感叹号&#xff0c;原因是对C盘进行了BitLocker驱动器加密操作。如果想去除感叹号&#xff0c;对C盘进行BitLocker解密即可。 步骤如下&#xff1a; 1.点击Windows搜索框 2.搜索框内输入 系统 3.按下回车&#xff0c;进入系统界面 4.点击隐私和安全性 点击BitLocker驱…

多个Echart遍历生成 / 词图云

echart官网 安装 如果版本报错推荐安装以下版本 npm install echarts4.8.0 --savenpm uninstall echarts//这个是卸载命令以下安装成功后是局部引入:多个Echart遍历生成 vue3echart单个页面多个图表循环渲染展示:<template><div class"main"><div …

Element plus 下拉框组件选中一个选项后显示的是 value 而不是 label

最近刚进行 Vue3 Element plus 项目实践&#xff0c;在进行表单二次封装的时候&#xff0c;表单元素 select 下拉框组件选中一个选项后显示的是 value 而不是 label&#xff0c;下面上代码&#xff1a; 原来的写法&#xff1a; <el-selectv-if"v.type select"…