字典
1.1 字典含义
- 字典是一种可变类型,可存储任意类型对象,字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号,可哈希的类型可以作为键,不可哈希的类型不能作为键(list, dict等)
1.2 字典实现原理
- 在Python中,字典通过哈希表实现的,使用开放寻址法解决冲突。
- 哈希表是一种key-value类型的数据结构,字典的每一个键都占用一个单元,一个单元分为两部分,分别是对键的引用和对值的引用,使用hash函数获取键的散列值,散列值对数组长度取余,取得值就是存放位置的索引
1.3 hash算法和哈希冲突
- 哈希算法
根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到有限的地址区间上的算法,称之为散列算法,杂凑算法
- 哈希表
数据经过哈希算法之后得到的集合。
- 哈希冲突
由于哈希算法被计算的数据是无限的,而计算后的算法是有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突,通俗来说就是key冲突了
1.4 解决哈希冲突的方法
- 开放定址法
从发生冲突的那个单元起,按照一定次序,从哈希表找到一个空闲的单元,然后把发生冲突的元素存入到该单元的一种方法。
- 链地址法
将哈希值相同的元素构成一个同义词的单链表,并将单链表的头指针存放在哈希表的第i个单元中,查找、插入和删除主要在同义词链表中进行
- 再哈希法
同时构造多个不同的哈希函数
- 建立公共溢出去
将哈希表分为公共表和溢出表,当溢出发生时,将所有溢出的数据统一放到溢出区
1.5 常用操作
new_dict = {"name": "zhangsan", "age": 18}
new_dict["height"] = 180
输出:{"name": "zhangsan", "age": 18", "height": 180}
del new_dict["name"]
输出:{"age": 18}
a = new_dict.pop["name"]
输出:zhangsan
new_dict.setdefault("weight", "60kg")
输出:{'name': 'zhangsan', 'age': 18, 'weight': '60kg'}
new_dict.update(name="lisi")
输出:{'name': 'lisi', 'age': 18}
new_dict.get("name")
输出:zhangsan
for key, val in new_dict.items():
print(key, val)
输出:name, zhangsan
age, 18
1.6 创建有序字典
from collections import OrderedDict
sort_dict = OrderedDict()
sort_dict["bar"] = 2
sort_dict["non"] = 8
sort_dict["sek"] = 5
输出:OrderedDict([('bar', 2), ('non', 8), ('sek', 5)])
new_dict = {"b":3, "a":4, "c":2, "d":10}
sort_dict = sorted(new_dict.items(), key=lambda i: i[0])
输出:[('a', 4), ('b', 3), ('c', 2), ('d', 10)]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~