1.字典定义
由一系列键值对组成的可变散列容器
语法:字典名 = { 键1:值, 键2:值 }
dict01 = { name: "唐人街探案", type: "喜剧", actor: "王宝强", }
语法非常简单,但这里又出现了一个新的概念散列,那什么是散列呢?
2.散列
定义:通过哈希算法将键转换为对应存储位置的容器类型。
特点1:无需遍历,直接计算储存位置,速度最快。
特点2:键必须唯一且只能是不可变类型的数据。
缺点:在内存中元素没有顺序且占内存较大。
我们来看看字典的内存分布图吧。
可以看到字典的底层其实是两个列表,字典也是可变的,所以它也有预留空间,也会自动扩容,但是字典和列表的不同点是,字典是快满的时候就扩容了,而列表是满了再扩。
那什么是哈希算法,什么又是哈希碰撞和开放寻址呢?
这个在下一章,也就是下一个系列将会详细描述。
3.字典增删改查方法
dict = {"name": "谭", "age": 17, "sex": "男"} print(dict.keys()) # 直接访问全部键 print(dict.values()) # 直接访问值 print(dict["name"]) # 由键访问值 print(dict.get("name")) # 由键访问值,好处不存在时也能不报错 # 增 # 直接让键等于一个值即可 dict["id"] = 1925123720 print(dict) # 删 # del 和 clear del dict["id"] print(dict) # dict.clear() # print(dict) # 改 dict["age"] = 18 print(dict) # 查 for key in dict.keys(): # 获得所有的键 print(key, end=" ") print() for value in dict.values(): # 获得所有的值 print(value, end=" ") print() print(dict.items()) # 得所有键值 for key, value in dict.items(): # 因为它获得的是键值对,所有可以打印两个 print(key, value) # 列表的知识点 list = ["小谭", "小孙", "小刘", "小赵", "小陈", "小徐"] # 枚举循环 for i, x in enumerate(list): print(i + 1, x)