【Python】一文带你学会数据结构中的字典、集合

news2025/1/24 8:51:29

 

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?type=blog个人简介:打工人。

持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。

如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666@foxmail.com 

Python中的字典和集合是两个重要的数据结构,它们在实际编程中经常被使用。 

本文将详细讲解Python数据结构中的字典、集合


目录

一、字典

1.1 字典的简介

1.2 字典的发展历史

1.3 字典的应用场景

1.4 字典的使用方法

1.4.1 创建字典

(1)使用花括号创建空字典

(2)使用键值对创建字典

(3)使用dict()函数创建字典

1.4.2 访问字典元素

1.4.3 修改字典元素

1.4.4 添加字典元素

1.4.5 删除字典元素 

1.4.6 遍历字典

(1)遍历键

(2)遍历值

(3)遍历键值对

1.4.7 字典方法

(1)keys():返回字典中所有的键

(2)values():返回字典中所有的值

(3)items():返回字典中所有的键值对

(4)pop(key):删除字典中指定键的键值对,并返回被删除的值

(5)clear():删除字典中的所有键值对

(6)copy():复制字典

1.5 字典的总结

二、集合

2.1 集合的简介

2.2 集合的发展历史

2.3 集合的应用场景

2.4 集合的使用方法

2.4.1 创建集合

(1)使用花括号创建空集合

(2)使用set()函数创建集合

2.4.2 集合的基本操作

(1)添加元素

(2)删除元素

(3)判断元素是否存在

2.4.3 集合运算

(1)交集

(2)并集

(3)差集

(4)对称差集

2.4.4 遍历集合

2.4.5 集合方法

(1)add(element):向集合中添加元素

(2)remove(element):从集合中删除元素

(3)pop():随机删除并返回集合中的一个元素

(4)clear():清空集合中的所有元素

(5)copy():复制集合

2.5 集合的总结

三、总结


一、字典

1.1 字典的简介

        字典是Python中一种可变、无序、键值对的数据结构。它是由一系列的键和相应的值组成,键是唯一的,值可以重复。字典中的键值对之间没有明确的顺序,通过键来访问对应的值。字典使用花括号{}来表示,键和值之间使用冒号:分隔,各键值对之间使用逗号,分隔。例如:

student = {"name": "Tom", "age": 18, "gender": "male"}

1.2 字典的发展历史

        Python中的字典最早由荷兰计算机科学家Guido van Rossum在1980年代中期设计实现。在早期的版本中,字典的实现使用了散列表(Hash Table)的数据结构,这是一种支持快速插入、删除和查找的数据结构。早期的Python字典实现受到了其他编程语言(如Perl)中字典的启发,并进行了一些优化。由于散列表的特性,Python的字典拥有了良好的性能,成为Python语言中的核心数据结构之一。

        随着Python的发展,字典在语法和性能上进行了进一步的改进。下面是关于Python字典发展史的一些里程碑。

  1. Python 2.0 在Python 2.0版本中,字典的内部实现进行了一些重大的改进。引入了新的哈希算法和散列碰撞的解决方案。这些改进提高了字典的性能和稳定性,使得字典可以更好地应对大规模数据集合的操作。

  2. Python 3.6 在Python 3.6版本中,字典的语法进行了一些改进。新增了一种新的字面量语法,在创建字典时可以使用简化的表达式,提高了代码的可读性和简洁性。例如,可以使用花括号{}来创建一个空字典,也可以使用冒号:来指定键值对。

  3. Python 3.7 在Python 3.7版本中,字典中的键值对保持插入顺序。这意味着字典中的元素将按照插入的顺序进行遍历,而不是无序的。这个改进提供了更好的可预测性和可靠性,使得字典在某些应用场景中更加实用。

        目前,Python中的字典已经非常成熟和稳定。在Python的版本迭代中,字典一直是一个重点关注和改进的对象,以满足各种不同的应用需求。

1.3 字典的应用场景

        字典的用途非常广泛,常见的应用场景包括:

  1. 数据存储:字典可以用于存储需要通过键值对进行访问的数据,比如存储学生的成绩、员工的工资等。
  2. 数据处理:字典可以用于对数据进行分组、分类和汇总,通过键的特性可以快速查找和访问相应的值。
  3. 数据传递:字典可以作为函数的参数和返回值,用于传递和返回多个相关的值。

1.4 字典的使用方法

1.4.1 创建字典

        我们可以通过以下几种方式创建字典:

(1)使用花括号创建空字典

my_dict = {}
print(my_dict)  # 输出:{}

(2)使用键值对创建字典

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
print(my_dict)  # 输出:{'name': 'Tom', 'age': 20, 'gender': 'male'}

(3)使用dict()函数创建字典

my_dict = dict(name='Tom', age=20, gender='male')
print(my_dict)  # 输出:{'name': 'Tom', 'age': 20, 'gender': 'male'}

1.4.2 访问字典元素

        我们可以通过键来访问字典中的值:

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
print(my_dict['name'])  # 输出:Tom
print(my_dict['age'])  # 输出:20

        注意:如果访问的键不存在于字典中,会抛出KeyError异常。可以使用get()方法来避免异常的发生: 

print(my_dict.get('name'))  # 输出:Tom
print(my_dict.get('height'))  # 输出:None

1.4.3 修改字典元素

        字典中的元素是可变的,我们可以直接通过键来修改值:

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
my_dict['age'] = 22
print(my_dict)  # 输出:{'name': 'Tom', 'age': 22, 'gender': 'male'}

1.4.4 添加字典元素

        我们可以通过设置一个新的键值对来添加字典元素:

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
my_dict['height'] = 180
print(my_dict)  # 输出:{'name': 'Tom', 'age': 20, 'gender': 'male', 'height': 180}

1.4.5 删除字典元素 

        我们可以使用del语句来删除字典中的元素: 

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
del my_dict['age']
print(my_dict)  # 输出:{'name': 'Tom', 'gender': 'male'}

1.4.6 遍历字典

        我们可以使用for循环来遍历字典的键或值:

(1)遍历键

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
for key in my_dict.keys():
    print(key)
# 输出:
# name
# age
# gender

(2)遍历值

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
for value in my_dict.values():
    print(value)
# 输出:
# Tom
# 20
# male

(3)遍历键值对

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
for key, value in my_dict.items():
    print(key, value)
# 输出:
# name Tom
# age 20
# gender male

1.4.7 字典方法

        字典提供了一系列常用的方法,以下是一些常用的字典方法:

(1)keys():返回字典中所有的键

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
print(my_dict.keys())  # 输出:dict_keys(['name', 'age', 'gender'])

(2)values():返回字典中所有的值

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
print(my_dict.values())  # 输出:dict_values(['Tom', 20, 'male'])

(3)items():返回字典中所有的键值对

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
print(my_dict.items())  # 输出:dict_items([('name', 'Tom'), ('age', 20), ('gender', 'male')])

(4)pop(key):删除字典中指定键的键值对,并返回被删除的值

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
value = my_dict.pop('age')
print(my_dict)  # 输出:{'name': 'Tom', 'gender': 'male'}
print(value)  # 输出:20

(5)clear():删除字典中的所有键值对

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
my_dict.clear()
print(my_dict)  # 输出:{}

(6)copy():复制字典

my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
new_dict = my_dict.copy()
print(new_dict)  # 输出:{'name': 'Tom', 'age': 20, 'gender': 'male'}

1.5 字典的总结

        字典作为一种核心的数据结构,具有以下几个特点和优势:

  1. 灵活性:字典可以存储任意类型的数据,可以嵌套和组合,适用于各种复杂的数据场景。
  2. 快速查找:字典通过键值对的方式存储和访问数据,在数据量较大时仍能提供快速的访问速度。
  3. 可变性:字典中的键和值可以随时修改、添加或删除,使得字典具有较强的动态性。
  4. 插入顺序保持:自Python 3.7起,字典中的元素按照插入的顺序遍历,提供了更好的可预测性和可靠性。

        总之,字典是Python语言中非常重要和实用的数据结构,具有广泛的应用场景。它在Python发展史中经历了多次的改进和优化,不断提高性能和稳定性。在实际编程中,熟练运用字典可以提高程序的效率和可维护性。

二、集合

2.1 集合的简介

        集合是Python中用于存储唯一元素的一种数据结构。它可以存储任意类型的数据,但在集合中每个元素都只能出现一次。集合是由一组无序、互不相同的元素构成的。在Python中,集合使用花括号{}表示,元素之间使用逗号,分隔。例如:

fruits = {"apple", "orange", "banana"}

2.2 集合的发展历史

        集合作为一种重要的数据结构,也在Python的发展过程中不断进行改进和优化。下面是关于Python集合发展史的一些里程碑。

  1. Python 2.3 在Python 2.3版本中,集合(set)首次作为一种基本的数据类型引入到Python中。集合的引入使得Python具备了更丰富的数据结构和操作,为程序开发提供了更多的选择。

  2. Python 2.6 在Python 2.6版本中,集合引入了新的操作符和方法,增强了集合的功能和灵活性。新增了与集合相关的运算符,如并集运算符|、交集运算符&、差集运算符-等,方便了集合之间的比较和操作。

  3. Python 3.0 在Python 3.0版本中,集合的内部实现进行了一些改进和优化。使用了更高效的散列表实现,提高了集合的性能和稳定性。同时,集合支持了更多的操作和方法,使得集合的用法更加灵活和方便。

2.3 集合的应用场景

        集合的用途主要包括:

  1. 数据去重:集合中的元素唯一性保证了其中没有重复的数据,可以用于去重操作。
  2. 数据关联:集合可以用于比较、计算和处理数据之间的关联关系,比如求交集、并集、差集等。
  3. 数据筛选:集合可以根据一定的条件筛选数据,将符合条件的元素提取出来。

2.4 集合的使用方法

2.4.1 创建集合

        我们可以通过以下几种方式创建集合:

(1)使用花括号创建空集合

my_set = set()
print(my_set)  # 输出:set()

(2)使用set()函数创建集合

my_set = set([1, 2, 3, 3, 4])
print(my_set)  # 输出:{1, 2, 3, 4}

2.4.2 集合的基本操作

        集合提供了一系列常用的操作,例如添加元素、删除元素、判断元素是否存在等等。

(1)添加元素

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

(2)删除元素

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

(3)判断元素是否存在

my_set = {1, 2, 3}
print(2 in my_set)  # 输出:True

2.4.3 集合运算

        集合可以进行交集、并集、差集等操作。

(1)交集

python
set1 = {1, 2, 3}
set2 = {2, 3, 4}
intersection = set1.intersection(set2)
print(intersection)  # 输出:{2, 3}

(2)并集

set1 = {1, 2, 3}
set2 = {2, 3, 4}
union = set1.union(set2)
print(union)  # 输出:{1, 2, 3, 4}

(3)差集

set1 = {1, 2, 3}
set2 = {2, 3, 4}
difference = set1.difference(set2)
print(difference)  # 输出:{1}

(4)对称差集

set1 = {1, 2, 3}
set2 = {2, 3, 4}
symmetric_difference = set1.symmetric_difference(set2)
print(symmetric_difference)  # 输出:{1, 4}

2.4.4 遍历集合

        我们可以使用for循环来遍历集合:

my_set = {1, 2, 3}
for item in my_set:
    print(item)
# 输出:
# 1
# 2
# 3

2.4.5 集合方法

        集合提供了一系列常用的方法,以下是一些常用的集合方法:

(1)add(element):向集合中添加元素

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

(2)remove(element):从集合中删除元素

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

(3)pop():随机删除并返回集合中的一个元素

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

(4)clear():清空集合中的所有元素

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

(5)copy():复制集合

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

2.5 集合的总结

        集合是Python中常用的数据结构,具有以下几个特点和优势:

  1. 唯一性:集合中的元素是唯一的,可以用于去重操作,提高数据的质量和准确性。
  2. 无序性:集合中的元素没有明确的顺序,可以在不关心顺序的场景中快速进行查找和操作。
  3. 可变性:集合中的元素可以随时添加或删除,适用于动态的数据处理和关联操作。
  4. 高效性:集合中元素的唯一性和散列表的实现保证了集合的高效性和良好的性能。

        总而言之,集合是Python中非常有用的数据结构之一,用于存储唯一元素和进行数据操作。随着Python的发展,集合在语法和性能上得到了不断的改进和优化,以适应不同的应用场景。熟练运用集合可以提高程序的效率和代码的可读性。

三、总结

        字典和集合是Python中常用的数据结构。字典用于存储键-值对,可以通过键来访问对应的值,并支持添加、删除和更新元素。集合用于存储一组无序且唯一的元素,支持添加、删除、取交集、并集等操作。在实际编程中,不断熟悉和灵活运用字典和集合可以提高代码的效率和可读性。

 

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

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

相关文章

一步一步学OAK之九:通过OAK相机实现视频帧旋转

目录 Setup 1: 创建文件Setup 2: 安装依赖Setup 3: 导入需要的包Setup 4: 定义变量Setup 5: 定义旋转矩形的四个顶点坐标Setup 6: 创建pipelineSetup 7: 创建节点Setup 8: 设置属性Setup 9: 建立链接Setup 10: 连接设备并启动管道Setup 11: 创建与DepthAI设备通信的输入队列和输…

C#核心知识回顾——2.拓展方法、运算符重载、分部类、里氏替换

1.拓展方法 为现有非静态变量类型添加新方法 1.提升程序拓展性 2.不需要再对象中重新写方法 3.不需要继承来添加方法 4.为别人封装的类型写额外的方法 特点&#xff1a; 1.一定是写在静态类中 2.一定是个静态函数 3.第一个参数为拓展目标 4.第一个参数用this修饰 /// <sum…

element table表格支持添加编辑校验

实现效果&#xff1a; 将table表格与form表单结合使用 &#xff08;用el-form外层包裹el-table结合rules进行校验&#xff09; 代码实现 <template><div><el-card class"box-card" shadow"never"><div><el-buttonsize"m…

E8-事关明细表里的控件事件绑定、日期的计算、明细表的求和等问题的处理办法

起因 下面的讲述的事情是从开发出差申请流程开始的。涉及的知识点偏多&#xff0c;且得容我慢慢梳理出来。以下篇幅可能会有点儿长&#xff0c;但内容我会争取写得精彩的。 图1 发起表单样式如图1&#xff0c;我想实现的是当修改出发日期或结束日期的时候&#xff0c;自动计算…

并发-synchronized详解

JDK1.6之前的synchronized关键字一来就直接给对象加了一把重量级锁&#xff0c;频繁地在用户态和内核态之间切换&#xff0c;导致性能非常低。为了弥补synchronized的不足&#xff0c;大佬doug lee写了一个AQS框架&#xff0c;用Java语言实现了ReentrantLock。然后在JDK1.6之后…

电脑文件夹怎么设置密码?3个方法为文件加密!

我的电脑里存了很多重要的文件夹&#xff0c;为了防止信息的泄露&#xff0c;我想把这些文件夹都设置密码。但是不知道具体应该如何操作。请求大家的帮助&#xff01; 我们平常在使用电脑时&#xff0c;可能会将很多重要的文件保存在电脑中。如果不想让别人看到我们这些重要的文…

JMeter安装RabbitMQ测试插件

目录 前言&#xff1a; 具体实现步骤&#xff1a; 1、ant环境搭建 2、AMQP源码下载 3、拷贝JMeter_core.jar包到JMeter-Rabbit-AMQP插件根目录下 4、修改AMQP插件的配置文件 5、打包 6、RabbitMQ客户端插件下载 7、完成以上&#xff0c;重启JMeter创建线程组就可以看到…

智能小家电如何升级Type-C接口充电?

目前市面上智能小家电充电接口还是USB Micor&#xff0c;AC&#xff0c;DC接口等&#xff0c;今年随着欧盟的一纸令下&#xff0c;22年12月24日&#xff0c;欧洲理事会最终批准了“在欧盟范围内统一充电器接口”的法案。这意味着到2024年&#xff0c;usb type-c接口将成为一系列…

openknx初编译

knx协议出来也是很长时间了&#xff0c;但国内相关开发的文章很少&#xff0c;比起zigbee,lora这些网上一搜一大零的&#xff0c;显得可怜。因为公司以后可能会开发knx产品&#xff0c;所以对国外的openknx自已研究了一下。 https://github.com/thelsing/knx 这个就是openknx项…

Openlayers实战,Openlayers调整地图可视范围到多个点组成的多边形边界,可视范围缩放到多个点的中心点

专栏目录: OpenLayers入门教程汇总目录 前言 本片文章详细讲解如何使用Openlayers调整地图可视范围到多个点组成的多边形边界。 也即Openlayers根据多个点坐标生成一个矩形可视范围,并判断当前传入的矩形可视范围是否在当前可视范围内。如果在当前可视范围内,则调整地图中…

latex中两种图并排放,而且各自有小标题caption

\begin{figure*}[htbp] \centering #小标题 \subfigure[Case study in terms of interpretability on dataset HDep3.]{ \begin{minipage}[t]{0.37\linewidth} %linewidth小于0.5 \centering \includegraphics[scale0.2]{figures/hdep3d.png} #大小主要调节scale. %\caption{fi…

Blazor前后端框架Known-V1.2.1

V1.2.1 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 概述 基于C#和Blazor实现的快速开发框架&#xff0c;前后端分离&#xff0c;开箱即用。跨平台&#xff0c;单页应用&#xff…

耳挂式骨传导耳机哪个牌子好,分享几个品牌的骨传导耳机

骨传导耳机就是利用震动来传递声音的耳机&#xff0c;在运动时佩戴骨传导耳机&#xff0c;可以听歌也能听周围的声音&#xff0c;提高了运动时的安全性。目前市面上的骨传导耳机也是琳琅满目。今天就来给大家分享下目前市面上比较常见的几款骨传导耳机。希望对正在选购骨传导耳…

Linux v4l2框架分析

1. 概述 V4L2(Video for Linux 2)&#xff1a;Linux内核中关于视频设备驱动的框架&#xff0c;对上向应用层提供统一的接口&#xff0c;对下支持各类复杂硬件的灵活扩展&#xff1b; V4L2框架&#xff0c;主要包括v4l2-core、meida framework、videobuf2等模块&#xff0c;这也…

120.【ElastiSearch】

ElasticSearch-初级 (一)、什么是ElasticSearch(库、表、记录)1.ElasticSearch是什么2.ElasticSearch学习路线3.聊聊Doug Cutting4.Lucene 和 ElasticSearch的关系: (二)、ElasticSearch概述1.基本概述2.百度搜索关键字思考3.目前都有哪些公司在用ElasticSearch技术 (三)、ES和…

检验样本是否服从泊松分布

本文以一个订单数据为例&#xff0c;研究顾客购买次数的分布规律&#xff0c;尝试从中估计总体的分布&#xff0c;以对后续的订单数据进行预测或进行业绩的对比。 # 环境准备 import numpy as np import pandas as pd import scipy.stats as stats import matplotlib.pyplot a…

Nginx(3)nginx的Rewrite功能

nginx跨域 Rewrite功能配置Rewrite的相关命令Rewrite的案例域名跳转域名镜像独立域名目录自动添加/合并目录防盗链 Rewrite功能配置 Rewrite是Nginx服务器提供的一个重要基本功能&#xff0c;是Web服务器产品中几乎必备的功能。主要的作用是用来实现URL的重写。 注意:Nginx服…

AI生成图片检测器接口,应用于内容审核、虚拟现实应用和促进艺术及设计领域创新等场景

【检测率99.0%以上】可以快速准确地判断一张图片是否为AI生成&#xff0c;减少人工审核的工作量&#xff0c;提高工作效率、降低运营成本&#xff0c;帮助人们更好地管理和利用数字图像资源。广泛应用于内容审核、虚拟现实应用和促进艺术及设计领域创新等场景。 一、效果展示 …

Unity学习笔记--EventSystem事件系统在使用上需要注意的地方(很基础,但是很多人会忘记!!!)

目录 前言代码Unity 场景配置运行报错分析解决办法拓展&#xff08;预告&#xff09; 前言 之前有写过一篇关于事件系统实现以及使用的文章 Unity学习笔记–C#事件系统的实现与应用 最近在使用的时候遇到了一些问题&#xff0c;所以在此记录下&#xff0c;也为看到这篇文章的人…

魏副业而战:视频带货借助热点,这个账号月赚20w+

我是魏哥&#xff0c;与其在家躺平&#xff0c;不如魏副业而战&#xff01; 最近魏哥一直在研究短视频&#xff0c;每天刷刷抖音&#xff0c;经常刷到高考相关的视频。 本来高考跟我没关&#xff0c;毕竟孩子还小&#xff0c;但是刷得多了&#xff0c;魏哥发现有情况。 像这个…