contents

  • 序列
    • 字典
      • 字典的创建
      • 字典元素的访问
      • 字典元素的添加、修改、删除
      • 序列解包
      • python实例
      • 字典核心底层原理
        • 将键值对放进字典的底层过程
        • 根据键,查找键值对的底层过程
        • 用法总结
    • 集合
      • 集合的创建和删除

序列

字典

字典是“键值对”的无序可变序列。

  1. 通过键对象,快速获取、删除、更新对应的值对象(类似列表中的下标数字a[0]的0)
  2. 键为任意不可变数据,如正整数、浮点数,字符串 ,元组。
  3. 键不可重复

字典的创建

  1. {}、dict()来创建字典
a={'name':'yueyue','age':18}
b=dict(name='yueyue',age=18)
c=dict([('name','yueyue'),('age',18)])#一个元组表示一个键值对
  1. 通过zip()来创建字典,数量可不同,按最小的为准
k=['name','age']
v=['yueyue',18]
dict(zip(k,v))#zip的第一个参数作为键,第二个是值
#{'name': 'yueyue', 'age': 18}
  1. 通过fromkeys创建值为空的字典
dict.fromkeys(['name','age'])#列表传递所有的键
#{'name': None, 'age': None}
#None是一个值,表示空

字典元素的访问

示例:a={‘name’: ‘yueyue’, ‘age’: 18,‘sex’:‘woman’}

  1. 通过键获得值,若键不存在,则抛出异常
a['name']
#'yueyue'
a['birth']
#KeyError: 'birth'
  1. 通过get()方法获得值,若键不存在,返回None,也可指定键不存在时返回的对象,推荐使用
a={'name': 'yueyue', 'age': 18,'sex':'woman'}
a.get('name')
#'yueyue'
a.get('birth')
#什么都没有
a.get('birth','unknown')
#'unknown'
  1. tems()列出所有键值对
a.items()
#dict_items([('name', 'yueyue'), ('age', 18), ('sex', 'woman')])
  1. keys()列出所有键,values()列出所有值
a.keys()
#dict_keys(['name', 'age', 'sex'])
a.values()
#dict_values(['yueyue', 18, 'woman'])
  1. len()返回键值对个数
len(a)
#3
  1. 检测键是否在字典中
'name' in a
#True

字典元素的添加、修改、删除

示例:a={‘name’: ‘yueyue’, ‘age’: 18,‘sex’:‘woman’}

  1. 给字典添加键值对
    若键已经存在,则覆盖旧的键值对,若键不存在,则新增键值对。
a={'name': 'yueyue', 'age': 18,'sex':'woman'}
a['age']=20
a['height']='2m'
a
#{'name': 'yueyue', 'age': 20, 'sex': 'woman', 'height': '2m'}
  1. update()将新字典中所有键值对全部添加到旧字典对象
    若key有重复,则直接覆盖
b={'name':'little yueyue','job':'student'}
a.update(b)
a
#{'name': 'little yueyue', 'age': 18, 'sex': 'woman', 'job': 'student'}
  1. del()方法删除指定键值对
del(a['age'])
a
#{'name': 'yueyue', 'sex': 'woman'}
  1. clear()删除所有键值对
a.clear()
a
#{}
  1. pop()删除指定键值对,并返回对应的值对象
a={'name': 'yueyue', 'age': 18,'sex':'woman'}
a.pop('sex')
#'woman'
  1. 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

字典核心底层原理

基本知识:

  1. 字典对象的核心是散列表,散列表是一个稀疏数组(总有空白元素的的数组)。
  2. 数组的每个单元叫做bucket(bucket结果和大小一致,通过偏移量来读取指定的bucket)。
  3. 每个bucket有两个部分:一个是键对象的引用,一个是值对象的引用。
    我们需要明白的是:key和索引如何对应

将键值对放进字典的底层过程

  1. 把a[‘name’]="yueyue"这一键值对放入字典,先计算“name”的散列值,散列值有多种算法,如bin(hash(“name”))。

  1. python会根据列表拥挤程度扩容,扩容导致的结果就是要新建一个更大的散列表,并把字典里已有的元素添加到新的散列表里。这个过程中可能发生新的散列冲突,导致新散列表中键的次序变化。
    一般接近23\frac{2}{3}32​时,数组就会扩容。

根据键,查找键值对的底层过程

  1. 输入a.get(“name”),计算“name”的散列值

用法总结

  1. 键必须是可散列
    1.1 数字,字符串、元组都是可散列的
    1.2 自定义对象需要满足如下三点:
    \qquad支持hash()函数
    \qquad支持通过__eq__()方法检测相等性
    \qquad若a==b为真,则hash(a)==hash(b)也为真
  2. 字典在内存中开销巨大,典型的空间换时间
  3. 键查询速度快
  4. 往字典里添加新键可能会导致扩容,导致散列表中键的次序变化。因此 ,不要在遍历字典的同时对字典进行修改。即遍历和修改要分开。

集合

集合是无序可变,元素不能重复,底层是字典实现,集合所有元素都是字典中的键对象,因此不能重复且唯一。

集合的创建和删除

  1. {}创建,add()方法添加
a={1,2,3,3,4,2}
a.add(5)
a.add(3)
a
#{1,2,3,4,5}
  1. 使用set(),将列表、元组、可迭代对象等转成集合
a=set([0,1,2,3])
b=set((0,1,2,3))
c=set(x for x in range(4))
#a,b,c都为集合
  1. remove()删除指定元素,clear()清空整个集合
a={0, 1, 2, 3}
a.remove(0)
a
#{1,2,3}
a.clear()
a
#set()
  1. 集合的相关操作
    示例: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 的序列之字典与集合相关推荐

  1. python基础学习笔记9:元组、字典、集合

    元组的定义与使用 1.为什么需要元组 思考 如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做? 答:列表?列表可以一次性存储多个数据,但是列表中的数据允许更改. num_list = [10 ...

  2. python day2 python基础 列表、元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码...

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

  3. Python基础教程,Python入门教程

    Python 是一门上手简单.功能强大.通用型的脚本编程语言.Python 类库极其丰富,这使得 Python 几乎无所不能,网站开发.软件开发.大数据分析.网络爬虫.机器学习等都不在话下. 这套 P ...

  4. Python基础(简明Python教程)

    Python基础(简明Python教程) 参考简明Python教程 基本概念 注释符 # 基本数据类型 整数.长整数.浮点数(52.3E-4).复数(-5+4j) 字符串 对象 运算符 与Java基本 ...

  5. Python基础之day03-字符串,列表,元组,字典

    Python基础之day03-字符串,列表,元组,字典 文章目录 Python基础之day03-字符串,列表,元组,字典 一.字符串 二.下标与字符串切片 三.列表 四.元祖 五.字典 六.公用方法 ...

  6. python基础知识面试题-python的一些基本概念知识和面试题

    对于机器学习算法工程师而言,Python是不可或缺的语言,它的优美与简洁令人无法自拔.那么你了解过Python编程面试题吗?从Python基础到网页爬虫你是否能全方位Hold住?今天,机器之心为读者们 ...

  7. python程序如何执行死刑_「Python基础知识」Python生成器函数

    原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...

  8. python基础知识-python基础知识,python必背内容,一、python的基

    python基础知识,python必背内容,一.python的基 一.python的基础 1.简单写一行python代码:print("hello,world')print("你好 ...

  9. python基础教程视频-Python基础视频教程全集

    原标题:Python基础视频教程全集 Python编程语言的定位是"优雅"."明确"."简单",所以对于Python初学者来说,学起来没有那 ...

最新文章

  1. java jar 打印_Java 打印流 及 commons-io.jar包方法
  2. PHP中session和cookie的区别
  3. admui 能再php上用吗,Javascript 方法
  4. java请模拟出双重定时器_Java多线程基础 - osc_czmaebyq的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. cesium 设置地球默认区域为中国 一键返回默认区域
  6. Android连续点击多次事件的实现
  7. 通过键盘方向键控制TreeView节点的移动
  8. linux mysql 内存监控_MySQL监控性能的一些方法总结
  9. 服务器虚拟化 远程,服务器虚拟化 远程
  10. Vue学习--MVVM模型
  11. 【WEB程序设计】web程序设计的一些基本知识
  12. 基于阿里云Aliddns动态域名解析的客户端PHP实现与服务器端(包含C与PHP)实现
  13. 地球上20张最惊人照片!不看将后悔一辈子
  14. 针对VC++ 上各种方法获取时间差,CSpanTime等
  15. vue用mand-mobile ui做交易所移动版实战示例
  16. CSS3视窗单位vw、vh、vmin、vmax说明
  17. wps英文文档排版小技巧
  18. Docker删除指定镜像
  19. Photoshop CS3专家讲堂视频教程(10月21日更新到106课)
  20. Ribbon配置和实现原理

热门文章

  1. 如何快速查找并删除手机上的重复文件
  2. Redis 个人狂神说视频学习笔记
  3. usb驱动开发12——设备生命线
  4. UVa 109 - SCUD Busters(凸包)
  5. thinkphp的数据库方法column
  6. 什么是零拷贝技术(Zero Copy)?
  7. 一张交货单多次POD以及多次开票
  8. C语言课设之电话查询系统。
  9. 为什么要用色彩色差仪?色彩色差仪有哪些应用?
  10. ORACLE XML Publisher