hash函数是根据关键字key计算出应该存储地址的位置 , 哈希函数把key转成哈希值来定位数据存储的位置 , 是基于哈希函数建立的一种查找表 , Python 中的字典就是用哈希表来实现的 。本文主要介绍哈希表、映射和集合这三种数据结构以及他们在python中的用法 。
哈希表-Hash table哈希表哈希表(Hash table) , 也叫散列表 , 根据键(Key)访问在内存储存位置的数据 , 通过把键值映射到表中一个位置来访问记录 , 映射函数称为散列函数或者哈希函数 , 根据哈希函数建立的记录数据的表称为哈希表(散列表) 。
比如键值为k , 对应的值放在 f(k) 的存储位置上 , 这个对应关系 f 称为散列函数 , 通过它来建立的表称为散列表 。
哈希碰撞两个不同的key值得到相同的哈希值的情况称为哈希碰撞(Hash Collisions) , 也就是 f(k1) = f(k2) 。哈希碰撞的解决方案有:开放寻址(Open Addressing)法、链地址法(Chaining)、再哈希法(Rehash)和建立一个公共溢出区 。
- 开放寻址法:产生冲突后继续寻找下一个空闲的空间(没有被占用的存储地址) , Python使用的就是这种方法 。
- 链地址法:散列到同一位置的元素 , 不继续往下寻找 , 而是将所有关键字为同义词的记录存储在同一线性链表中 , HashMap就采用了链地址法 。
- 再散列函数法:产生冲突后 , 就再来一次哈希计算 , 直到没有冲突 。
- 建立一个公共溢出区:也就是建两个表 , 一个作为基本表 , 另一个是存储和基本表发生冲突元素的溢出表 。
python 字典Python 中的字典就是典型的哈希表 , 是一系列由键(key)和值(value)配对组成的元素的集合 , 其中value可以是任何数据类型 , 且可以重复 。Key不能重复并且必须是不可变(immutable)的 。
在 Python3.7+版本中 , 字典是有序的 , 3.6 之前是无序的 。
创建字典
# 创建空字典>>> mydict={}>>> type(mydict)<class 'dict'>>>> mydict{}>>> mydict = {1:"Apple",2:"banana"}# dict()方法创建字典>>> mydict = dict({1:"apple",2:"banana"})>>> mydict = dict([(1, 'apple'), (2, 'banana')])>>> mydict{1: 'apple', 2: 'banana'}# fromkeys()方法>>> seq=(1,2,3)>>> mydict = dict.fromkeys(seq)>>> mydict{1: None, 2: None, 3: None}>>> mydict = dict.fromkeys(seq,'apple')>>> mydict{1: 'apple', 2: 'apple', 3: 'apple'}
理论上来说 , 直接使用{}创建字典比dict()方法效率更高 , {} 会直接调用底层C代码 。直接使用Dict[Key] = ‘Value’的形式新增元素 , 可以增加任何数据类型 , 比如可以嵌套字典 , 列表等 。如果key已经存在 , 则进行更新 。
>>> mydict={}>>> mydict[2] = 'banana'>>> mydict{2: 'banana'}
访问元素直接使用key访问元素值 , 也可以使用 get(key) 方法获取 , 如果键不存在 , 调用 get() 函数可以返回一个默认值>>> mydict = {1:"apple",2:"banana"}>>> mydict[2]'banana'>>> mydict.get(2)'banana'>>> mydict.get(3,'null')'null'
setdefault()方法也可以用来获取元素值 , 和get()方法不同的是 , 如果查找的key不存在 , 它会设置一个默认值(default=None):>>> mydict.setdefault(2)'banana'>>> mydict.setdefault(3)>>> mydict{1: 'apple', 2: 'banana', 3: None}>>> mydict.setdefault(4,'orange')'orange'>>> mydict{1: 'apple', 2: 'banana', 3: None, 4: 'orange'}
删除元素del删除元素>>> mydict = {1:"apple",2:"banana"}>>> del mydict[2]>>> mydict{1: 'apple'}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 自己如何重装笔记本电脑操作系统呢? 笔记本操作系统
- 戴尔笔记本质量怎么样? 戴尔电脑怎么样
- 4000元左右笔记本电脑 4000左右的笔记本
- 上海笔记本维修电脑 本本维修
- AMD|显卡之后等等党又赢了 消息称4月份笔记本电脑大降价
- 电脑黑屏按哪三个键(笔记本黑屏后无法唤醒屏幕)
- 笔记本电脑和投影仪咋连 投影仪连接电脑
- 傅雷家书读书笔记20篇 傅雷家书 读后感
- 笔记本电池无法充电解决方法
- 为知笔记下载 为知笔记