python基础之Day4 python 的序列之字典与集合
contents
- 序列
- 字典
- 字典的创建
- 字典元素的访问
- 字典元素的添加、修改、删除
- 序列解包
- python实例
- 字典核心底层原理
- 将键值对放进字典的底层过程
- 根据键,查找键值对的底层过程
- 用法总结
- 集合
- 集合的创建和删除
序列
字典
字典是“键值对”的无序可变序列。
- 通过键对象,快速获取、删除、更新对应的值对象(类似列表中的下标数字a[0]的0)
- 键为任意不可变数据,如正整数、浮点数,字符串 ,元组。
- 键不可重复
字典的创建
- {}、dict()来创建字典
a={'name':'yueyue','age':18}
b=dict(name='yueyue',age=18)
c=dict([('name','yueyue'),('age',18)])#一个元组表示一个键值对
- 通过zip()来创建字典,数量可不同,按最小的为准
k=['name','age']
v=['yueyue',18]
dict(zip(k,v))#zip的第一个参数作为键,第二个是值
#{'name': 'yueyue', 'age': 18}
- 通过fromkeys创建值为空的字典
dict.fromkeys(['name','age'])#列表传递所有的键
#{'name': None, 'age': None}
#None是一个值,表示空
字典元素的访问
示例:a={‘name’: ‘yueyue’, ‘age’: 18,‘sex’:‘woman’}
- 通过键获得值,若键不存在,则抛出异常
a['name']
#'yueyue'
a['birth']
#KeyError: 'birth'
- 通过get()方法获得值,若键不存在,返回None,也可指定键不存在时返回的对象,推荐使用
a={'name': 'yueyue', 'age': 18,'sex':'woman'}
a.get('name')
#'yueyue'
a.get('birth')
#什么都没有
a.get('birth','unknown')
#'unknown'
- tems()列出所有键值对
a.items()
#dict_items([('name', 'yueyue'), ('age', 18), ('sex', 'woman')])
- keys()列出所有键,values()列出所有值
a.keys()
#dict_keys(['name', 'age', 'sex'])
a.values()
#dict_values(['yueyue', 18, 'woman'])
- len()返回键值对个数
len(a)
#3
- 检测键是否在字典中
'name' in a
#True
字典元素的添加、修改、删除
示例:a={‘name’: ‘yueyue’, ‘age’: 18,‘sex’:‘woman’}
- 给字典添加键值对
若键已经存在,则覆盖旧的键值对,若键不存在,则新增键值对。
a={'name': 'yueyue', 'age': 18,'sex':'woman'}
a['age']=20
a['height']='2m'
a
#{'name': 'yueyue', 'age': 20, 'sex': 'woman', 'height': '2m'}
- update()将新字典中所有键值对全部添加到旧字典对象
若key有重复,则直接覆盖
b={'name':'little yueyue','job':'student'}
a.update(b)
a
#{'name': 'little yueyue', 'age': 18, 'sex': 'woman', 'job': 'student'}
- del()方法删除指定键值对
del(a['age'])
a
#{'name': 'yueyue', 'sex': 'woman'}
- clear()删除所有键值对
a.clear()
a
#{}
- pop()删除指定键值对,并返回对应的值对象
a={'name': 'yueyue', 'age': 18,'sex':'woman'}
a.pop('sex')
#'woman'
- popitem()随机删除和返回键值对
与列表中的pop()不同,字典是无序的,就无所谓第一个最后一个 。
序列解包
序列解包可用于元组,列表字典,方便对多个变量赋值。
a,b,c=(1,2,3)
[a,b,c]=[1,2,3]
(a,b,c)=(1,2,3)
序列解包用于字典时,默认是对键操作
示例:a={‘name’: ‘yueyue’, ‘age’: 18,‘sex’:‘woman’}
a={'name': 'yueyue','sex':'woman', 'age': 18}
x,y,z=a
x
#'name'
y
#'sex'
z
#'age'
操作 | 说明 |
---|---|
x,y,z=a.values() | 对值进行操作,返回值 |
x,y,z=a.items() | 对键值对进行操作,返回键值对的元组 |
python实例
用字典表示
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]
#获得第二行人的薪资
tb[1].get('salary')
#20000
字典核心底层原理
基本知识:
- 字典对象的核心是散列表,散列表是一个稀疏数组(总有空白元素的的数组)。
- 数组的每个单元叫做bucket(bucket结果和大小一致,通过偏移量来读取指定的bucket)。
- 每个bucket有两个部分:一个是键对象的引用,一个是值对象的引用。
我们需要明白的是:key和索引如何对应
将键值对放进字典的底层过程
- 把a[‘name’]="yueyue"这一键值对放入字典,先计算“name”的散列值,散列值有多种算法,如bin(hash(“name”))。
- python会根据列表拥挤程度扩容,扩容导致的结果就是要新建一个更大的散列表,并把字典里已有的元素添加到新的散列表里。这个过程中可能发生新的散列冲突,导致新散列表中键的次序变化。
一般接近23\frac{2}{3}32时,数组就会扩容。
根据键,查找键值对的底层过程
- 输入a.get(“name”),计算“name”的散列值
用法总结
- 键必须是可散列
1.1 数字,字符串、元组都是可散列的
1.2 自定义对象需要满足如下三点:
\qquad支持hash()函数
\qquad支持通过__eq__()方法检测相等性
\qquad若a==b为真,则hash(a)==hash(b)也为真 - 字典在内存中开销巨大,典型的空间换时间
- 键查询速度快
- 往字典里添加新键可能会导致扩容,导致散列表中键的次序变化。因此 ,不要在遍历字典的同时对字典进行修改。即遍历和修改要分开。
集合
集合是无序可变,元素不能重复,底层是字典实现,集合所有元素都是字典中的键对象,因此不能重复且唯一。
集合的创建和删除
- {}创建,add()方法添加
a={1,2,3,3,4,2}
a.add(5)
a.add(3)
a
#{1,2,3,4,5}
- 使用set(),将列表、元组、可迭代对象等转成集合
a=set([0,1,2,3])
b=set((0,1,2,3))
c=set(x for x in range(4))
#a,b,c都为集合
- remove()删除指定元素,clear()清空整个集合
a={0, 1, 2, 3}
a.remove(0)
a
#{1,2,3}
a.clear()
a
#set()
- 集合的相关操作
示例:a={1,2,3,4} b={3,4,5,6}
操作 | 说明 | 结果 |
---|---|---|
a|b a.union(b) |
并集 | {1,2,3,4,5,6} |
a&b a.intersection(b) |
交集 | {3,4} |
a-b a.difference(b) |
差集 | {1,2} |
b-a b.difference(a) |
差集 | {5,6} |
python基础之Day4 python 的序列之字典与集合相关推荐
- python基础学习笔记9:元组、字典、集合
元组的定义与使用 1.为什么需要元组 思考 如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做? 答:列表?列表可以一次性存储多个数据,但是列表中的数据允许更改. num_list = [10 ...
- python day2 python基础 列表、元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码...
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...
- Python基础教程,Python入门教程
Python 是一门上手简单.功能强大.通用型的脚本编程语言.Python 类库极其丰富,这使得 Python 几乎无所不能,网站开发.软件开发.大数据分析.网络爬虫.机器学习等都不在话下. 这套 P ...
- Python基础(简明Python教程)
Python基础(简明Python教程) 参考简明Python教程 基本概念 注释符 # 基本数据类型 整数.长整数.浮点数(52.3E-4).复数(-5+4j) 字符串 对象 运算符 与Java基本 ...
- Python基础之day03-字符串,列表,元组,字典
Python基础之day03-字符串,列表,元组,字典 文章目录 Python基础之day03-字符串,列表,元组,字典 一.字符串 二.下标与字符串切片 三.列表 四.元祖 五.字典 六.公用方法 ...
- python基础知识面试题-python的一些基本概念知识和面试题
对于机器学习算法工程师而言,Python是不可或缺的语言,它的优美与简洁令人无法自拔.那么你了解过Python编程面试题吗?从Python基础到网页爬虫你是否能全方位Hold住?今天,机器之心为读者们 ...
- python程序如何执行死刑_「Python基础知识」Python生成器函数
原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...
- python基础知识-python基础知识,python必背内容,一、python的基
python基础知识,python必背内容,一.python的基 一.python的基础 1.简单写一行python代码:print("hello,world')print("你好 ...
- python基础教程视频-Python基础视频教程全集
原标题:Python基础视频教程全集 Python编程语言的定位是"优雅"."明确"."简单",所以对于Python初学者来说,学起来没有那 ...
最新文章
- java jar 打印_Java 打印流 及 commons-io.jar包方法
- PHP中session和cookie的区别
- admui 能再php上用吗,Javascript 方法
- java请模拟出双重定时器_Java多线程基础 - osc_czmaebyq的个人空间 - OSCHINA - 中文开源技术交流社区...
- cesium 设置地球默认区域为中国 一键返回默认区域
- Android连续点击多次事件的实现
- 通过键盘方向键控制TreeView节点的移动
- linux mysql 内存监控_MySQL监控性能的一些方法总结
- 服务器虚拟化 远程,服务器虚拟化 远程
- Vue学习--MVVM模型
- 【WEB程序设计】web程序设计的一些基本知识
- 基于阿里云Aliddns动态域名解析的客户端PHP实现与服务器端(包含C与PHP)实现
- 地球上20张最惊人照片!不看将后悔一辈子
- 针对VC++ 上各种方法获取时间差,CSpanTime等
- vue用mand-mobile ui做交易所移动版实战示例
- CSS3视窗单位vw、vh、vmin、vmax说明
- wps英文文档排版小技巧
- Docker删除指定镜像
- Photoshop CS3专家讲堂视频教程(10月21日更新到106课)
- Ribbon配置和实现原理