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

Python学习从0到1 day13 Python数据容器.4.set集合、dict字典,映射

他往黑夜里去了,我陪他 

                       ——24.2.4

一、set集合

1.为什么使用集合?

通过特性来分析:

        列表可修改、支持重复元素且有序

        元组、字符串不可修改、支持重复元素且有序

        局限在于:它们都支持重复元素

当场景需要对内容进行去重处理,列表、元组、字符串就不方便了

而集合最主要的特点是不支持重复元素(自带去重功能),并且内容无序

2.集合的定义

基本语法:

# 定义集合字面量

{元素,元素,……元素}

# 定义集合变量

变量名称 = {元素,元素,……元素}

# 定义空集合

变量名称 = set()

和列表、元组、字符串等定义基本相同

        列表使用:[]

        元组使用:()

        字符串使用:""

        集合使用:{}

#定义集合
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set_empty = set()    #定义空集合
print(f"my_set的内容是:{my_set},类型是:{type(my_set)}")
print(f"my_set的内容是:{my_set_empty},类型是:{type(my_set_empty)}")

3.集合的使用

集合的常用操作——修改

首先,因为集合是无序的,所以集合不支持:下标索引访问

但是集合和列表一样,是允许修改的,集合的修改方法如下:

①添加新元素

   语法:集合.add(元素)

   功能:将指定元素,添加到集合内

   结果:集合本身被修改,添加了新元素

#添加新元素
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.add("苦难是花开的伏笔")
print(f"my_set添加元素后的结果是{my_set}")

②移除元素

   语法:集合.remove(元素)

   功能:将指定元素,从集合内删除

   结果:集合本身被修改,移除了元素

#移除指定元素
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.remove("未来可期")
print(f"my_set删除元素万事胜意后的结果是:{my_set}")

③从集合中随机取出元素

   语法:集合.pop()

   功能:从集合中随机取出一个元素

   结果:会得到一个元素的结果。同时集合本身被修改,元素被移除

#随机取出一个元素
my_set = {"一切都会好的","万事胜意","未来可期"}
element = my_set.pop()
print(f"集合被取出元素是:{element},取出元素后的集合是:{my_set}")

④清空集合

   语法:集合.clear()

   功能:清空集合

   结果:集合本身被清空

#清空集合,clear
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.clear()
print(f"集合被清空后的结果是:{my_set}")

⑤求出2个集合的差集

   语法:集合1.difference(集合2)

   功能:取出集合1和集合2的差集(集合1有而集合2没有的)

   结果:得到一个新集合,集合1和集合2不变

#取出2个集合的差集
my_set1 = {"一切都会好的","万事胜意","未来可期"}
my_set2 = {"一切都会好的","万事胜意","未来可期","我一直相信","苦难是花开的伏笔"}
my_set3 = my_set2.difference(my_set1)
print(f"集合2有而集合1没有的元素是:{my_set3}")

⑥消除2个集合的差集

   语法:集合1.difference_update(集合2)

   功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素

   结果:集合1被修改,集合2不变

#消除两个集合的差集
my_set1 = {"一切都会好的","万事胜意","未来可期"}
my_set2 = {"一切都会好的","万事胜意","我一直相信","苦难是花开的伏笔"}
my_set1.difference_update(my_set2)
print(f"集合2是:{my_set2}")
print(f"集合1是:{my_set1}")

⑦两个集合合并

   语法:集合1.union(集合2)

   功能:将集合1和集合2组合成新集合

   结果:得到新集合,集合1和集合2不变

#两个集合合并成一个集合
set1 = {1,2,3,4,7}
set2 = {2,5,6,7,8}
set3 = set1.union(set2)
print(f"集合1是:{set1}")
print(f"集合2是:{set2}")
print(f"集合3是:{set3}")

⑧统计集合中的元素数量

   语法:len(集合名)

   功能:统计集合中有几个元素

   结果:得到集合中的元素个数

#统计集合中的元素数量len()
my_set = {"一切都会好的","万事胜意","我一直相信","苦难是花开的伏笔"}
num = len(my_set)
print(f"my_set中共有:{num}个元素")

⑨集合的遍历

   集合不支持下标索引,所以不能使用while循环

   但是可以使用for循环

#集合的遍历,for循环
set1 = {1,2,3,4,7}
for i in set1:print(f"集合中的元素有{i}")

⑩总结

# 演示数据容器集合的使用#定义集合
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set_empty = set()    #定义空集合
print(f"my_set的内容是:{my_set},类型是:{type(my_set)}")
print(f"my_set的内容是:{my_set_empty},类型是:{type(my_set_empty)}")#添加新元素
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.add("苦难是花开的伏笔")
print(f"my_set添加元素后的结果是:{my_set}")#移除指定元素
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.remove("未来可期")
print(f"my_set删除元素万事胜意后的结果是:{my_set}")#随机取出一个元素
my_set = {"一切都会好的","万事胜意","未来可期"}
element = my_set.pop()
print(f"集合被取出元素是:{element},取出元素后的集合是:{my_set}")#清空集合,clear
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.clear()
print(f"集合被清空后的结果是:{my_set}")#取出2个集合的差集
my_set1 = {"一切都会好的","万事胜意","未来可期"}
my_set2 = {"一切都会好的","万事胜意","未来可期","我一直相信","苦难是花开的伏笔"}
my_set3 = my_set2.difference(my_set1)
print(f"集合2有而集合1没有的元素是:{my_set3}")#消除两个集合的差集
my_set1 = {"一切都会好的","万事胜意","未来可期"}
my_set2 = {"一切都会好的","万事胜意","我一直相信","苦难是花开的伏笔"}
my_set1.difference_update(my_set2)
print(f"集合2是:{my_set2}")
print(f"集合1是:{my_set1}")#两个集合合并成一个集合
set1 = {1,2,3,4,7}
set2 = {2,5,6,7,8}
set3 = set1.union(set2)
print(f"集合1是:{set1}")
print(f"集合2是:{set2}")
print(f"集合3是:{set3}")#统计集合中的元素数量len()
my_set = {"一切都会好的","万事胜意","我一直相信","苦难是花开的伏笔"}
num = len(my_set)
print(f"my_set中共有:{num}个元素")#集合的遍历,for循环
set1 = {1,2,3,4,7}
for i in set1:print(f"集合中的元素有{i}")

4.集合的特点

①可以容纳多个数据

②可以容纳不同类型的数据(混装)

③数据是无序存储的(不支持下标索引)

④不允许重复数据存在

⑤可以修改(增加或删除元素等)

⑥支持for循环

5.练习——信息去重

有如下列表对象:

my_list = ["一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信","苦难是花开的伏笔","一切都会好的","我一直相信"]

要求:

        ①定义一个空集合

        ②通过for循环遍历列表

        ③在for循环中将列表的元素添加至集合

        ④最终得到元素去重后的集合对象,并打印输出

#定义一个空集合
my_set = set()
#for循环遍历链表
my_list = ["一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信","苦难是花开的伏笔","一切都会好的","我一直相信"]
for i in my_list:#添加元素到集合内部my_set.add(i)#最终打印出来
print(f"通过for循环遍历去重后的链表为:{my_set}")

二、dict字典

1.为什么使用字典?

使用字典,可以通过用一个key数据取出对应的value数据的值

2.字典的定义

字典的定义,同样使用{},不过存储的元素是一个个的:键值对,如下语法:

#定义字典字面量

{key:value,key:value,……,key:value}

#定义字典变量

my_dict = {key:value,key:value,……,key:value}

#定义空字典

my_dict = {}              # 空字典定义方式1 

my_dict = dict()        # 空字典定义方式2

# 定义字典
my_dict1 = {"张三":27,"李四":19,"王五":23}# 定义空字典
my_dict2 = {}
my_dict3 = dict()
print(f"字典1的内容是:{my_dict1},类型:{type(my_dict1)}")
print(f"字典2的内容是:{my_dict2},类型:{type(my_dict2)}")
print(f"字典3的内容是:{my_dict3},类型:{type(my_dict3)}")# 定义重复key的字典
my_dict4 = {"张三":99,"李四":81,"张三":27}
print(f"重复字典为:{my_dict4}")

3.字典数据的获取

字典同集合一样,不可以使用下标索引

但是字典可以通过key值来取得对应的value

语法:字典[key]可以取到对应的value

# 从字典中基于key获取value
my_dict1 = {"张三":27,"李四":19,"王五":23}
print(my_dict1["张三"])
print(my_dict1["李四"])
print(my_dict1["王五"])
age1 = my_dict1["张三"]
print(f"张三的年纪为:{age1}")

4.字典的嵌套

字典的key和value可以是任意数据类型(key不可为字典)

那么,就表明,字典是可以嵌套的

# 定义嵌套字典
stu_score_dict = {"王里宏":{"语文":77,"数学":66,"英语":33},"周杰论":{"语文":88,"数学":86,"英语":55},"林俊节":{"语文":99,"数学":96,"英语":66}
}
print(f"学生的考试信息为:{stu_score_dict}")

5.从嵌套字典中获取数据

# 定义嵌套字典
stu_score_dict = {"王里宏":{"语文":77,"数学":66,"英语":33},"周杰论":{"语文":88,"数学":86,"英语":55},"林俊节":{"语文":99,"数学":96,"英语":66}
}
print(f"学生的考试信息为:{stu_score_dict}")# 从嵌套字典中获取数据
score = stu_score_dict["周杰论"]["数学"]
print(f"周杰论的数学信息是:{score}")

6.字典的常用操作

1.新增元素

        语法:字典[key] = value

        结果:字典被修改,新增了元素

#新增元素
my_dict = {"张三":99,"李四":85,"王五":77}
my_dict["小明"] = 67
print(f"字典经过更新元素后的结果是:{my_dict}")

2.更新元素

        语法:字典[key] = value

        结果:字典被修改,元素被更新

        注意:字典key不可以重复,所以对已存在的key执行上述操作,就是更新value的值

#更新元素
my_dict = {"张三":99,"李四":85,"王五":77}
my_dict["张三"] = 87
print(f"字典经过更新元素后的结果是:{my_dict}")

3.删除元素

        语法:字典.pop(key)

        结果:获得指定key的value,同时字典被修改,指定key的数据被删除

#删除元素
my_dict = {"张三":99,"李四":85,"王五":77}
score = my_dict.pop("王五")
print(f"字典中被移除一个元素后结果是:{my_dict},王五的考试分数是:{score}")

4.清空元素

        语法:字典名.clear

#清空元素
my_dict.clear()
print(f"字典被清空后是:{my_dict}")

5.获取全部的key

        语法:字典.keys(),结果:得到字典中的全部key

#获取全部的key
my_dict = {"张三":99,"李四":85,"王五":77}
keys = my_dict.keys()
print(f"字典中的key值有:{keys}")

6.遍历字典

        获取全部的key,通过全部的key对字典进行遍历

        语法: for key in keys/字典名:

#获取全部的key
my_dict = {"张三":99,"李四":85,"王五":77}
keys = my_dict.keys()
print(f"字典中的key值有:{keys}")#遍历字典
for key in keys:print(f"字典的key是{key}")print(f"字典的value是{my_dict[key]}")

7.统计字典内的元素数量

        语法:len(字典名)

#统计字典内的元素数量
num = len(my_dict)
print(f"字典内的元素数量是:{num}")

7.字典的特点

①可以容纳多个数据

②可以容纳不同类型的数据

③每一份数据是KeyValue键值对

④可以通过key获取到value,key不可重复(重复会覆盖)

⑤不支持下标索引

⑥可以修改(增加或删除更新元素等)

⑦支持for循环,不支持while循环

8.练习——升职加薪

有如下员工信息,请使用字典完成数据的记录

并通过for循环,对所有级别为1级的员工,级别上升一级,薪水增加1000元

# 演示字典的课后练习,升职加薪,对所有级别为1级的员工,级别上升1级,薪水增加1000元# 组织字典记录数据
info_dict = {"王力鸿":{"部门":"科技部","工资":3000,"级别":1},"周杰轮":{"部门": "市场部","工资": 5000,"级别": 2},"林俊节":{"部门": "市场部","工资": 7000,"级别": 3},"张学油":{"部门": "科技部","工资": 4000,"级别": 1},"刘德滑":{"部门": "市场部","工资": 6000,"级别": 2}
}print(f"员工在升值加薪之前的结果:{info_dict}")# for循环遍历字典
for i in info_dict:#if条件判断符合条件员工if info_dict[i]["级别"] == 1:#升职加薪操作#获取到员工的信息字典employee_info_dict = info_dict[i]#修改员工信息employee_info_dict["级别"] = 2    #级别+1employee_info_dict["工资"] += 1000    #工资+1000#将员工信息更新回info_dictinfo_dict[i] = employee_info_dict# 输出结果
print(f"对员工进行升职加薪后的结果是:{info_dict}")

相关文章:

Python学习从0到1 day13 Python数据容器.4.set集合、dict字典,映射

他往黑夜里去了,我陪他 ——24.2.4 一、set集合 1.为什么使用集合? 通过特性来分析: 列表可修改、支持重复元素且有序 元组、字符串不可修改、支持重复元素且有序 局限在于:它们都支持重复元素 当场景需要对内容进行去重处理&am…...

Java生成微信小程序二维码的方式有哪些?

大家好我是咕噜美乐蒂,很高兴又见面啦!今天我们来谈一下如何使用Java生成微信小程序二维码,有哪些方式方法呢? 生成微信小程序二维码是开发微信小程序时的常见需求之一。在Java中,我们可以使用多种方式来生成微信小程…...

一箭11星,吉利未来出行星座第二个轨道面部署完成!

临近春节,国内卫星产业又传来好消息! 2024年2月3日7时37分,11颗卫星通过长征二号丙运载火箭,在西昌卫星发射中心发射升空。火箭顺利将所有卫星送入预定轨道,所有卫星状态正常,发射任务获得圆满成功。 本次发…...

【持续学习系列(九)】《Continual Learning with Pre-Trained Models: A Survey》

一、论文信息 1 标题 Continual Learning with Pre-Trained Models: A Survey 2 作者 Da-Wei Zhou, Hai-Long Sun, Jingyi Ning, Han-Jia Ye, De-Chuan Zhan 3 研究机构 National Key Laboratory for Novel Software Technology, Nanjing University; School of Artifici…...

redis的AOF

redis 提供了两种持久化方式—— RDB(Redis DataBase) 和 AOF(Append Only File) ,可以将 Redis 在内存中的数据库状态保存到磁盘里。 RDB快照并不是很可靠。如果服务器突然宕机了,最新的数据就会丢失。除了 RDB 持久化功能之外,Redis 还提供…...

TDengine 签约杭州云润,助力某大型水表企业时序数据处理

在智慧电表水表的数据采集和存储过程中,时序数据处理成为一个重要的问题。由于电表水表数据具有时间序列的特点,传统的数据库和数据处理方式往往难以满足大规模数据的高速采集、存储和实时分析需求。因此,越来越多的企业开始进行数据架构改造…...

迷宫(蓝桥杯省赛C/C++)

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角&am…...

Elastic Search

ES 与关系型数据库 MySQL 的数据参考关系 MySQLESdatabaseindextabletyperowdocumentcolumnfieldschemamappingindexdefaultsqlQuery DSL E-SQLES 安装启动 docker network ls | grep elastic || docker network create elastic version=8.3.3 docker run -d \ --name elas…...

elementUI中el-tree组件单选没有复选框时,选中、current-node-key高亮、刷新后保留展开状态功能的实现

目录 一、代码实现1. 属性了解 ([更多](https://element.eleme.cn/#/zh-CN/component/tree))2. 实现步骤3.代码示例 二、 效果图 一、代码实现 1. 属性了解 (更多) node-key 每个树节点用来作为唯一标识的属性,整棵树…...

Ubuntu上开启FTP服务教程

在Ubuntu服务器上配置FTP服务是一个常见的需求,无论是用于文件分享、网站管理还是数据备份。FTP(文件传输协议)是一种用于在网络上传输文件的协议,它可以让用户通过身份验证下载或上传文件。本文将指导您如何在Ubuntu系统上安装和…...

C语言数组指针详解与应用

在C语言中,指针是一种特殊的变量类型,存储了其他变量的地址。数组指针则是指向数组的指针,它提供了更灵活的方式处理数组。本篇博客将详细介绍指针和数组指针的概念,并通过实例演示如何使用指针对数组进行初始化、修改和遍历。 什…...

计算机服务器中了DevicData勒索病毒如何解密,DevicData勒索病毒解密流程

网络数据安全一直是企业关心的主要话题,近期,云天数据恢复中心接到很多企业的求助,企业的计算机服务器遭到了DevicData勒索病毒攻击,导致企业计算机服务器瘫痪无法正常工作,严重影响了工作业务开展。经过云天数据恢复中…...

面试150 位1的个数 位运算

Problem: 191. 位1的个数 文章目录 思路复杂度Code 思路 👨‍🏫 参考 复杂度 Code public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n){int res 0;while (n ! 0){res 1;n & n - 1;// 把最后…...

Mysql的BufferPool

Mysql的BufferPool Mysql是一个存储数据到磁盘的进程,但是磁盘的速度难以与CPU相比,所以InnoDB存储引擎在处理客户端的请求时,当需要访问某个页的数据时,就会把完整的页的数据全部加载到内存中。将整个页加载到内存中后就可以进行…...

嵌入式中物联网核心技术有哪些

IoT军事技术 物联网军事技术是一项利用IoT感知技术在军事活动中获取人、装备、作战环境状态的信息特征,从而实现在军事活动中做出智能化决策和控制局势的军事方针。 据悉,早于2012年10月军方联合了社会研究机构合力创建了“军事物联网联合实验室”。 …...

C语言入门到精通之练习36:一个最优美的图案(在TC中实现)。

题目:一个最优美的图案(在TC中实现)。 程序分析:无。 程序源代码: 实例 // Created by www.erdangjiade.com on 15/11/9. //#include "graphics.h" #include "math.h" #include "dos.h&…...

【Nginx】nginx入门

文章目录 一、Web服务器二、Nginx三、Nginx的作用Web服务器正向代理反向代理 四、CentOS上安装Nginx(以CentOS 7.9为例) 一、Web服务器 Web 服务器,一般是指“网站服务器”,是指驻留于互联网上某种类型计算机的程序。Web 服务器可以向 Web 浏览器等客户…...

【数据结构】并查集(路径压缩)

文章目录 并查集1.朴素版本2.路径压缩3.按秩合并4.启发式合并5.练习题 并查集 1.朴素版本 1. 并查集解决的是连通块的问题,常见操作有,判断两个元素是否在同一个连通块当中,两个非同一连通块的元素合并到一个连通块当中。 并查集和堆的结构…...

FreeMark ${r‘原样输出‘} ${r“原样输出“}

FreeMark ${r’原样输出’} ${r"原样输出"} 在${}使用 小写字母r接两个单引号或两个双引号包裹的内容可以原样输出, 字母r只能用小写 ${r想要原样输出的内容} --用了单引号${r"想要原样输出的内容"} --用了双引号 例子: ${r"${r}"} 得到 ${r…...

nginx初学者指南

一、启动、停止和重新加载配置 前提:先要启动nginx 在Windows上启动nginx的步骤如下: 1. 下载并安装nginx。可以从nginx官网下载适合自己操作系统的版本,一般是zip压缩包,解压到指定目录中。 2. 进入nginx的安装目录&#xff…...

龙虎榜——20250610

上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...