python的dict和set

关于python中set与dict的无序问题        每个熟悉python的人都知道,python提供给了我们各种各样原生的数据结构,如list、tuple、set、dict等等。这些形形色色的数据结构为我们程序猿提供了业务支持。但是要用好这些对象,可就要理解这些结构的特点。比如简单的区分:可变与不可变、有序与无序。那么本文就想和大家分享一下,这个无序中的细节。        在开始之前,本蟒蛇严重申明,集合和字典是无序的!!集合和字... 阅读详情

python的dict和set

dict

Python字典:dict,使用键-值对(key-value)存储数据,具有较快的查找速度。

举个例子,假设要根据一个人的的名字查找对应的对应的数据,如果用list实现,需要两个list:

names = ['张三', '李四', '王五']
scores = [88, 78, 89]

我们寻找对应的人的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,数据越多耗时越长。

如果用dict实现,只需要一个“名字”-“成绩”的对照,直接根据名字查找成绩。

>>> d = {'张三': 88, '李四': 78, '王五': 89}
>>> d['张三']
88

dict除了初始化时指定外,还可以通过key放入:

>>> d['李磊'] = 33
>>> d['李磊']
33

一个key只能对应一个value,多次对一个key放入value,后面的值会把前面的值覆盖:

>>> d['小明'] = 90
>>> d['小明']
90
>>> d['小明'] = 88
>>> d['小明']
88

如果key不存在,dict就会报错:

>>> d['Thomas']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Thomas'

要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:

>>> '小红' in d
False

二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:

>>> d.get('小红')
>>> d.get('小红', -1)
-1

注意:返回None的时候Python的交互环境不显示结果。

要删除一个key,用pop(key)方法,对应的value也会从dict中删除:

>>> d.pop('李四')
75
>>> d
{'张三': 88, '王五': 89}

请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。

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

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

list相反:

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

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

注意:dict的key必须是不可变对象。

这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。

在Python中,字符串、整数等都是不可变的,可以放心地作为key。而list是可变的,不能作为key:

>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

set

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

要创建一个set,用{x,y,z,...}列出每个元素:

>>> s = {1, 2, 3}
>>> s
{1, 2, 3}

或者提供一个list作为输入集合:

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。

重复元素在set中自动被过滤:

>>> s = {1, 1, 2, 2, 3, 3}
>>> s
{1, 2, 3}

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

通过remove(key)方法可以删除元素:

>>> s.remove(4)
>>> s
{1, 2, 3}

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

set和dict的唯一区别仅在于没有存储对应的value,set的原理和dict一样,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。

再议不可变对象

上面我们讲了,str是不变对象,而list是可变对象。

对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,比如:

>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']

而对于不可变对象,比如str,对str进行操作:

>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'

虽然字符串有个replace()方法,也确实变出了'Abc',但变量a最后仍是'abc',应该怎么理解呢?

我们先把代码改成下面这样:

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'

要始终牢记的是,a是变量,而'abc'才是字符串对象!有些时候,我们经常说,对象a的内容是'abc',但其实是指,a本身是一个变量,它指向的对象的内容才是'abc':

┌───┐     ┌───────┐
│ a │────▶│ 'abc' │
└───┘     └───────┘

当我们调用a.replace('a', 'A')时,实际上调用方法replace是作用在字符串对象'abc'上的,而这个方法虽然名字叫replace,但却没有改变字符串'abc'的内容。相反,replace方法创建了一个新字符串'Abc'并返回,如果我们用变量b指向该新字符串,就容易理解了,变量a仍指向原有的字符串'abc',但变量b却指向新字符串'Abc'了:

┌───┐     ┌───────┐
│ a │────▶│ 'abc' │
└───┘     └───────┘
┌───┐     ┌───────┐
│ b │────▶│ 'Abc' │
└───┘     └───────┘

所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

车载测试工程师必备:5分钟搞定CANoe台架搭建(附DBC导入技巧) 本文为车载测试工程师提供快速搭建CANoe测试台架的实用指南,涵盖硬件连接、DBC文件导入及常见报错解决方案。通过详细步骤和高效技巧,帮助工程师在5分钟内完成台架搭建,提升车载测试效率,特别适合紧急功能验证场景。 阅读详情

相关推荐

国产大模型 coding plan 实战决策指南:GLM、Kimi、豆包、abab 四大模型分层选型与工程落地

大模型辅助编程(coding assistant)正从概念验证走向规模化工程落地,其核心已不再是‘能否生成代码’,而是‘如何在真实开发流程中精准赋能’。理解模型能力边界、匹配技术栈特征、构建分层工作流(L1行级补全/L2函数生成/L3模块重构),是实现稳定提效的关键。GLM系列以工程稳定性见长,适合代码审计与测试生成;Kimi-Max凭借200K超长上下文胜任深度重构与合规审查;豆包响应快、框架适配深,是IDE高频补全的理想选择;abab系列则在IoT固件等跨模态场景中展现独特价值。本文聚焦国产模型在金融、

weixin_32238157的博客 428

大学python教材实验七字典与集合答案_Python 基础(七):字典与集合

1 字典1.1 简介当看到字典这个词时,有些人包括我自己在内,首先映入眼帘的便是新华字典我清楚的记得,刚上小学时老师就让每一个学生准备一本新华字典,它的使用大家也应该都清楚,通过拼音、偏旁部首等进行查询;今天我们说的字典(dict)是 Python 的数据结构,因为都叫字典,我们不用想也知道它们是十分相似的,它们的内容都是以键-值(key-value)的方式存在的。dict 拥有良好的查询速度,d...

weixin_39676348的博客 6413

基于大模型的脑疝全流程预测与诊疗方案研究

目录一、引言1.1 研究背景与目的1.2 研究意义1.3 大模型技术概述二、脑疝概述2.1 定义与分类2.2 发病机制与病因2.3 临床表现2.4 诊断方法三、大模型在脑疝预测中的应用3.1 数据采集与预处理3.2 模型训练与选择3.3 模型验证与优化四、术前预测与评估4.1 病情严重程度预测4.2 手术风险预测4.3 个性化手术方案制定4.4 麻醉方案制定五、术中监测与决策5.1 实时监测指标5.2 大模型辅助决策5.3 应对突发情况六、术后评估与护理6.1 术后恢复情况评估6.2 并发症风险预测与预防6

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1285

大学python教材实验七字典与集合答案_2018-08-28 day7 python基础 字典和集合(含作业)...

1.字典(dict)一.字典是容器类型(序列 ),以键值对作为元素。字典里面存的数据全是以键值对的形式出现的b/键值对----> 键:值(key:value)dict1 = {'key1':value1,'key2':value2 }ditc2 = {} #空的字典'''键(key):要唯一,不可变的(字符串,数字,布尔,元组---->推荐使用字符串)值(value):可以不唯一,...

weixin_31050349的博客 4339

【个人记录】CentOS7升级glibc至2.28

由于CentOS7系统已经停止支持, 虽然大部分业务已经迁移至OpenEuler,但仍然有部分业务系统跑在CentOS7上。在尝试部署新业务环境时经常会提示如下错误(以code-server运行需要的node 20为例)node -v为了保障业务可正常运行,通常采用Docker继承好的node环境进行部署,但部分场景还是需要宿主机使用新版glibc版本。本文记录本人一次成功升级glibc(2.17=>2.28)的步骤。

喵呜 3883

小白 虚拟机 kali_Linux安装 详细教程

安装版本:VMmare workstation pro kali_Linux 安装环境:Window10 首先我们先了解一下什么是kali_linux: Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。每一季度更新一次。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行

m0_50917178的博客 9万+

Python习题(附答案)7集合与字典

头歌实践教学平台——​Python编程技术。

焚花入骨 焚歌为引——Sayuri《月と花束》 4117

Android16 RK3576 Bluetooth source和sink模式切换

摘要:本文介绍了在RK3576平台上实现蓝牙A2DP模式动态切换的修改方案。通过在device配置文件中添加A2DP Sink相关属性,修改Bluetooth模块代码实现:1)在Config.java中增加persist.bluetooth.rka2dpsink属性控制模式切换;2)修改A2dpSinkStreamHandler.java取消音频焦点限制;3)调整btif_a2dp_sink.cc默认授予音频焦点。最终通过设置persist.bluetooth.rka2dpsink属性为true/false

tzj1058756809的博客 860

大学python教材实验七字典与集合答案_python学习笔记-7-字典和集合

dictPython内置了字典:dict的支持,使用键-值(key-value)存储,具有极快的查找速度。假设要根据同学的名字查找对应的成绩,需要两个list:names = ['MUO', 'GUO', 'GAO']scores = [95, 75, 85]给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。如果用dict实...

weixin_39628945的博客 2131

使用微信小程序开发制作一个简单的在线问答应用

以上就是一个简单的在线问答小程序的开发过程。其中包括前端界面的布局和逻辑,后端接口的设计和实现,以及部署和测试的步骤。通过以上步骤,你可以自己尝试开发一个类似的在线问答应用。

2401_85258012的博客 798

基于VisionMaster实现数据实时存储至MySQL (二)

摘要:之前的分享主要聚焦于简单的一维数据实时存储。但在做缺陷检测项目时,情况往往更加复杂:一张检测图像中可能同时存在多个缺陷,每个缺陷都有一组独立的核心参数(如质心、长短轴、面积等)。如何在 MySQL 中记录这些成组出现的缺陷数据,而不只是简单的单条记录?

haier123888的博客 226

头歌实践教学平台Python-Python第七章集合与字典作业

【代码】头歌实践教学平台Python-Python第七章集合与字典作业。

LQ370534427的博客 1万+

uniapp(vue3):实现手机拍照或相册图片上传后给图片添加水印,uniapp实现多端图片上传、拍照上传自定义插入水印内容,调用手机摄像头打开相机并在周围悬挂自定义水印(支持文字水印/图片水印等)

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uni-app为图片添加自定义水印(解决生成图片不全问题),uniapp上传图片添加水印,uniapp H5实现手机拍照或相册上传图像并添加自定义水印,uniapp水印相机,uni-app为图片添加自定义水印,怎么在图片上加水印,图片水印,上传照片带水印,从相册选择图片加水印功能,拍完照片给图片加水印,添加照片水印,uniapp图片加水印,为图片添加自定义水印,uni-app上传图片并添加水印,上传图

✅ 精选推荐文章 3264

深入python的set和dict

深入python的set和dictdict的常见用法dict的子类set和frozensetdict和set实现原理 dict的常见用法 a = {"1":{"a":"aa"}, "2":{"b":"bb"}} # 清空字典 a.clear() # 浅拷贝字典 浅拷贝虽然可以正常赋值,但是如果 my_dopy_dict 中的值进行了改变,则 a 中的值也会进行对应的改变 my_dop...

柏~的博客 478

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

python中set和dict类型_Python之Dict和Set类型

Python之Dict和Set类型1. Python之什么是dictd = {'Adam': 95,'Lisa': 85,'Bart': 59,'Paul': 75}2. Python之访问dictd = {'Adam': 95,'Lisa': 85,'Bart': 59}print 'Adam:', d['Adam']print 'Lisa:', d['Lisa']print 'Bart:', ...

weixin_39828859的博客 88

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Python浅谈set和dict

python set 和 dict

杨同学的博客 680

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

20190319——python的dict和set

Python内置字典,dict全称dictionary,在其他语言中称为map,使用键值对(key-value),具有极快的查找速度 如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下: >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}...

寄蜉蝣于天地,渺沧海之一粟。 162

set python_Python中dict和set用法区别

1、Python中dict的概念及用法list 和 tuple 可以用来表示顺序集合,如名字集合['Adam', 'Lisa', 'Bart']分数集合[95, 85, 59]但是,要根据名字找到对应的成绩,用两个 list 表示就不方便。 如果把名字和分数关联起来,给定一个名字,就可以直接查到分数。Python的 dict 就是专门干这件事的。用 dict 表示“名字”-“成绩”的查找表如下:d...

weixin_39686230的博客 247

Python中无序性的问题探究-set和dict

本文转载:http://blog.youkuaiyun.com/qq_16617397/article/details/83627602 每个熟悉python的人都知道,python提供给了我们各种各样原生的数据结构,如list、tuple、set、dict等等。这些形形色色的数据结构为我们程序猿提供了业务支持。但是要用好这些对象,可就要理解这些结构的特点。比如简单的区分:可变与不可变、有序与无序。那么本文就想和大家分享一下,这个无序中的细节。 在开始之前,本蟒蛇严重申明,集合和字典是无序的!!集合和...

hocker_white的博客 781

GO与KEGG富集分析:原理、工具与可视化实践

基因功能富集分析是解读高通量测序数据的关键技术,通过统计方法识别差异基因在特定功能模块中的过度表达现象。GO(Gene Ontology)提供基因功能的标准化分类体系,涵盖生物过程、分子功能和细胞组分三个维度;而KEGG则聚焦基因在代谢通路和信号网络中的协同作用。利用clusterProfiler等工具可实现自动化分析,结合条形图、气泡图等可视化技术直观展示富集结果。该技术广泛应用于疾病机制研究、药物靶点发现等领域,特别是在癌症基因组学和单细胞测序数据分析中发挥重要作用。掌握GO/KEGG分析的标准化流程和

weixin_33951761的博客 393

python dict索引_Python的dict与set

Python中类似于PHP的数组的结构有list,tuple,dict和set, 其中list, tuple和set的类似于PHP的索引数组, 而dict就类似于PHP的关联数组,dict:dict的结构表示了一种映射关系, 与PHP的关联数组类似, 比如要定义个用户信息如下:name: Yi_Zhi_Yusex: Mancountry: China这个使用list,tuple和set都是不能直接...

weixin_39611506的博客 136

set python_使用dict和set

dictPython内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:names = ['Michael', 'Bob', 'Tracy']scores = [95, 75, 85]给定一个名字,要查找对应的成绩,就先要...

weixin_39928648的博客 312

python中的set和dict_详解Python中dict与set的使用

Python中类似于PHP的数组的结构有list,tuple,dict和set, 其中list, tuple和set的类似于PHP的索引数组, 而dict就类似于PHP的关联数组,dict:dict的结构表示了一种映射关系, 与PHP的关联数组类似, 比如要定义个用户信息如下:name: Yi_Zhi_Yusex: Mancountry: China这个使用list,tuple和set都是不能直接...

weixin_39824834的博客 320

python中dict和set的30种操作方法

文章目录字典dict创建字典(五种方法)手动创建使用 dict() 构造函数使用可迭代对象使用fromkeys() 方法使用内置函数zip遍历字典获取字典所有键集合获取字典所有值集合判断键是否在字典中获取某键对应的值添加或修改一个键值对删除一个键值对获取字典视图键必须是可哈希的对象批量插入键值对字典键值对存在不插入,不存在则插入将两个字典合并求两个字典的差集按字典的key排序按字典的value排序获取字典最大key的value获取字典最大value的key集合创建集合集合并集集合交集集合差集集合异或添加元素

雷恩Layne 1851

Python基础之dict和set的使用

Python内置了字典:dict的支持,dict全称dictionary,在其他语言种也称为map,使用键-值(key-value)存储,具有极快的查找速度。

m0_72557783的博客 596

Python之Dict和Set类型

Dict类型 list和tuple时表示顺序集合,例如[10,20,30,40,50],[A,B,C,D,E]这样的,有索引号的。但要A对应10,B对应20等等,list就不方便。但是可以把他们组成对应的查找表,A–>10,B–>20这样的。 dict就是可以把两个事物组起来,表示“key–value” d={ 'A':10, 'B':20, 'C':30, ...

liyuan_wang的博客 265
上一篇: Python的循环
Akzeptieren
博客等级 码龄8年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值