3.3 字典
键值对 无序的 可变序列
通过键对象 快速获取、删除、更新 值对象
键不可重复
- 创建
a = {'name':'hhh','age':18}
b = dict('name':'hhh','age':18)
c = [('name':'hhh','age':18)]
k = ['name','age']
v = ['hhh',18]
d = dict(zip(k,v))
e = dict.fromkeys('name','age') # 值为None
- 访问
a = {'name':'hhh','age':18}
a['name'] # 通过键
a.get("name")
a.get("666",'不存在') # 当666不存在时,返回不存在
a.items() # 显示所有键值对
a.keys() # 显示所有键
a.values() # 显示所有值
len()
'name' in a
- 增删、修改
a['job'] = 'student' # 键不存在则增加,存在则覆盖
a.update(b) # 用B覆盖A
pop() # 删除并返回
del()
clear() # 删除所有键值对
popitem() # 随机删除和返回该键值对
- 序列解包
方便对多个变量赋值
s = {'name':'hhh','age':18}
a,b = s
# a = 'name' b = 'age'
c,d = s.value()
# c = 'hhh' d = 18
e = s.items()
# e('name','hhh') # e[0] e[1]
- 复杂表格数据存储
emmm其实一点也不复杂,这里练到的程度
但是 很重要哦 基础
# 创建表格
# 先创建每一行(字典)
r1 = {'name':'haojiahuo','age':18}
r2 = {'name':'huaijiahuo','age':19}
# 组成表格(列表)
tb = [r1,r2]
# 打印表中所有的数据
for i i range(len(tb)):
print(tb[i].get('name'),tb[i].get('age'))
- 字典核心底层原理(重要)
字典对象核心:散列表->稀疏数组->数组的每一个单元bucket->键对象引用+值对象引用
# 1. 存
bin(hash('name')) # 计算键name的散列值
从右到左找偏移量 直到遇到空的偏移量 可以放进去
# 2. 取
相同的
-
字典的特点
a. 键必须可散列(数字、字符串、元组)、
自定义对象需( 支持hash()函数、 支持通过__eq__()方法检测相等性、 若a==b->hash(a)==hash(b) )
b. 字典在内存中开销过大,空间换时间
c. 键查询速度很快
d. 在字典中添加新键可能导致扩容、导致散列表中键的次序变化->不要在遍历字典的同时进行修改字典
3.4 集合
无序可变,元素不能重复(底层实现是字典)
- 创建、删除
a = {2233,'ggg'}
a = ['a','b','c']
b =set(a) # 把列表等其他变为集合
b.remove('a')
a.clear() # 全部清空
- 相关操作
# 并集
a | b
a.union(b)
# 交集
a & b
a.intersection(b)
# 差集
a - b
a.difference(b)