Python基础知识 2022-11-14 ★ 小结 43-50 字典_集合
文章目录
- 字典
- 字典的特点
- 创建方式
- 字典元素的访问
- 字典元素的添加
- 字典元素的删除
- 字典的序列解包
- 序列解包用于列表
- 序列解包用于元组
- 序列解包用于字典
- 表格的构建和打印,列表和字典综合嵌套
- 字典核心底层原理
- 把键对象放入字典的底层过程
- 根据键查找键值对的底层过程
- 字典底层原理小结
- 集合
- 集合的特点
- 集合的创建
- 集合的删除
- 集合的其它操作
字典
字典的特点
无序、可变、键值对
每个元素是一个键值对,包含键对象和值对象
键对象不可以重复(字典是一个依靠键对象的散列值来排列元素的散列表,键对象的散列值不可以重复)
创建方式
a = {'name':'marx','age':18,'salary':'unknown'}
a = dict('name'='marx','age'=18)
,键值对的元组
a = dict[('name','marx'),('age',18)]
,键值对元组组成的列表
a = dict(zip(键列表,值列表))
,zip()方式也同样适用于元组
a = dict.formkeys(['name','age'])
,创建值对象为空的字典,注意其中键对象是以列表形式出现,而不是只用逗号隔开
字典元素的访问
a['name']
,类似列表和元组中用a[0]
的访问方式
a.keys()
,列出字典a中所有的键对象
a.items()
,列出字典a中所有的键值对
a.values()
,列出字典a中所有的值对象
a.get('name')
,获取字典a中’name’键对象的值对象
len(a)
,获取字典a的键值对个数
'name' in a
,not in
,判断键对象是否在字典a中
字典元素的添加
a['address'] = '南天门'
,如果字典a中没有address这个键,就添加这个键值对;如果有,就更新值对象
a.update(b)
,b是一个新的字典,将b字典中的内容拷贝到字典a中,重复键就覆盖,没有的键就新增
字典元素的删除
del(a['name'])
,删除字典a中键对象为name的键值对
a.clear()
,清空字典a,字典a变成空字典
a.pop('name')
,返回值是name的值对象,抛出name后字典a中就没有这个键值对了
a.popitem('name')
,乱序抛出字典a中的键值对,当a为空字典时会抛异常
字典的序列解包
序列解包用于列表
[a,b,c]=[10,20,30]
❓ 去掉方括号好像没有影响
序列解包用于元组
x,y,z = (10,20,30)
(x,y,z) = (10,20,30)
❓ 不太理解列表和元组的序列解包的区别,看起来都是一次性对三个变量赋值
序列解包用于字典
序列解包用于字典默认是对键对象进行操作
a = {'name':'gaoqi','age':18,'job':'programmer'}
m,n,l = a
序列解包对字典中的值对象进行操作
e,f,g = a.values()
序列解包对字典中的键值对进行操作
e,f,g = a.items()
表格的构建和打印,列表和字典综合嵌套
思路:
- 构造表格
- 用字典构建每一行,需要储存数据
- 用列表装起来每一行,需要按重复格式增殖
- 打印
- 循环的是行数,也就是列表的元素数
- 按字典键对象打印值对象
r1 = {"name":"高小一", "age":18, "salary":30000, "city":"北京"}
r2 = {"name":"高小二", "age":19, "salary":20000, "city":"上海"}
r3 = {"name":"高小五", "age":20, "salary":10000, "city":"深圳"}tb = [r1,r2,r3]#获得第二行的人的薪资
print(tb[1].get('salary'))#打印所有人的薪资
for i in range(len(tb)):print(tb[i].get('salary'))
#打印所有数据
for i in range(len(tb)):print(tb[i].get('name'),tb[i].get('salary'),tb[i].get('city'))
字典核心底层原理
字典的本质是一个散列表,即稀疏数组,即总是有空白元素的数组
散列表中的每个单元叫bucket(表元、桶)
每个bucket有两个部分:键对象的引用、值对象的引用
所有bucket的结构、大小都一样,通过偏移量来读取指定的bucket
字典的键对象:必须可散列,即可以转换出哈希值,字符串、数字、元组皆可
把键对象放入字典的底层过程
- 计算键对象的散列值
bin(hash('name')
- 数组长度假设为8,也就是最小的索引值是7,是最大的3位二进制数,
- 取name的散列值最右端的3位,转换为0-7的索引值,假设为6
- 索引值为6的bucket是否为空
- 为空,将name键对象放入该bucket
- 不为空,取name散列值从最右端往左移动3位后的3位数,转换为0-7的索引值…重复步骤2,直到找到空bucket
根据键查找键值对的底层过程
跟上面这个差不多
- 算出键对象的散列值x
- 从散列值最右取值,转换成序号,找bucket的索引值
- 看bucket是否为空
- 为空,返回None
- 不为空,
- 取出该bucket中的键对象,算出该键对象的散列值y
- 对比x与y是否相等
- 相等,返回该bucket对应的值对象
- 不相等,回到步骤2,往左移动3位再找bucket
字典底层原理小结
- 键对象必须是可以散列的
- 数字、字符串、元组
- 自定义对象满足以下条件
- 支持
hash()
函数 - 支持通过
__eq__()
方法检验相等性 - 若 a==b为真,则hash(a)==hash(b)也为真
- 支持
- 键查询很快
- 字典是以空间换时间
- 字典中添加新建可能会导致扩容,导致散列表中键的次序改变,因此不要在遍历字典的同时对字典进行修改
集合
集合的特点
集合的底层就是字典,但只有字典的键对象
集合是无序的、可变的、元素不能重复的(跟字典几乎一样)
集合的创建
a = {'a','b','age'}
a = set(b)
,将可迭代对象b转换为集合,如果有重复元素就会只留下一个
集合的删除
a.clear()
,清空后得到一个空集合a
a.remove(10)
,删除集合a中的指定元素10
集合的其它操作
就像数学中的集合,并集、交集、差集
并集:a|b
, a.union(b)
差集:a-b
, a.difference(b)
交集:a&b
, a.intersecion(b)
Python基础知识 2022-11-14 ★ 小结 43-50 字典_集合相关推荐
- python:python基础语法三,列表、元组、字典、集合
python基础语法 文章目录 python基础语法 列表(list) 列表简介 切片 列表修改元素 列表的方法 遍历列表 序列(sequence) 序列的基本操作 range()函数 EMS(Emp ...
- Python基础(三)列表、元组、字典、集合
一.序列(sequence) 序列是Python中最基本的一种数据结构. 数据结构指计算机中数据存储的方式. 序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引),并且序列中的数 ...
- python 列表 元祖 字典 集合_python基础知识之列表、元祖、字典、集合、字符串。...
1.可变类型之列表 列表用 [ ]来定义是可变的,可以通过索引值来去查询里面的字段可以可以追加,删除等 ```python names='zhangyang guyun xiangpeng xulia ...
- 【Python基础知识-pycharm版】第五节-字典\集合
第五节-字典\集合\控制语句 字典 字典的创建 字典元素的访问 字典元素添加.修改.删除 序列解包 表格数据使用字典和列表存储,并实现访问 字典核心底层原理(重要) 集合 集合相关操作 字典 字典是& ...
- Day2 Python基础学习——字符串、列表、元组、字典、集合
Python中文学习大本营:http://www.pythondoc.com/ 一.字符串操作 一.用途:名字,性格,地址 name = 'wzs' #name = str('wzs')print(i ...
- python基础(09)——列表,元组,字典,集合
#列表的普通操作 lists = ['张飞','岳飞','双飞'] print(lists[0]) #访问列表的莫个元素lists[0] = '飞飞' #修改列表的某个元素 print(lists)# ...
- 第一节课的Python基础知识
第一节课的Python基础知识 Python内置的数据类型 1.number 2.string 3.list 4.tuple 5.dict 6.set 其他小结 方法range()的使用 获取一个li ...
- python基础知识学习笔记(1)
python 基础知识学习笔记(1) 总结一下Python基础知识,以防忘记. 文章目录 python 基础知识学习笔记(1) 一.起步 1.python安装与编译环境 二.变量和简单数据类型 三.列 ...
- Python基础知识笔记
文章目录 Python基础知识 教程:https://www.liaoxuefeng.com/wiki/1016959663602400 内置函数:https://docs.python.org/3/ ...
- 1、Python 基础知识总结
1.Python 简介 Python 是一门简单易学的,面向对象的,解释型的脚本语言,也是一种开源的.可移植性强的.可扩展性强的高级编程语言,常用于科学计算与人工智能.WEB 开发.金融.云计算等领域 ...
最新文章
- 阿里巴巴的云原生应用开源探索与实践
- c语言中 字符串常量的界定符,C字符串操作函数
- sqlite自己主动更新数据库
- OpenJudge NOI 1.7 30:字符环
- 分布式内存文件系统Alluxio
- linux信任主机建立不了,openssh主机间信任关系建立
- SnagIt的Visual Studio Team System插件
- 分治法解决组合问题(递归)
- openim php sdk,imsdk_restapi-php-sdk
- 运营前线1:一线运营专家的运营方法、技巧与实践03 与用户沟通,请避免这6个“坑”!...
- 大数据爬虫的一些小目标
- 如何实现用手机远程控制电脑?
- 怎样将计算机和电视机连接网络连接,电脑怎么连接电视 电脑和电视连接方法图文教程...
- HP-UX之MP管理
- 微信公众号开发以及测试公众号菜单配置
- 【转】实习中,我怎样学习和工作
- 连续函数的最佳平方逼近
- 九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试六十题
- PHP支付宝当面付异步回调如何实现验签
- 郭敬明道歉承认作品抄袭:如何维护互联网作品版权信息
热门文章
- UE4 蒙太奇 组合动画
- java计算机毕业设计小学教师课程管理系统源程序+mysql+系统+lw文档+远程调试
- PYGAME - Event 事件
- 2018 dota2 战队十杀分析
- 【企业架构设计实战】应用架构设计
- make错误 redis6_redis安装make失败,make[1]: *** [adlist.o] Error 127....
- G1怎样设置WAP上网
- javaSwing+MySQl实现图书馆登录页面(完整)
- linux fcitx改mac输入法,Linux安装fcitx输入法
- 如何用A4纸排版打印并制作成四分之一大小的册子(简易说明书)