1、字典
定义:字典是以 key :value 的形式来保存数据,用{} 来表示,存储的是 key : value
查找效率比较高(注:字典存储数据时,用的是hash值来存储,算法不能变(python)
数据必须是不可变的(可哈希),字典的key必须是可哈希的(不可变)
列表是可变的,不可哈希
元组是不可变的,可哈希的
2、字典的增删改查
增加
dic[新key] = 值
dic.setdefault() 有添加的功能,如果key存在,不添加
流程:判断新key是否在字典中存在,如果已经存在了,不做变更;如果不存在,执行添加操作
删除
dic.pop(key)
dic.popitem() 随机删除一项,在python早期的版本中,字典是无序的。
del dic[key]
dic.clear() 清空
修改
dic[老key] = 值
update(dic1) # 把dic1中的内容更新到dic中,如果key重名,则修改替换,如果不存在key,则新增。
查询
一般用key来查找具体的数据。
1、直接使用key就可以拿到value。当key不存在时,报错
2、dic.get(key) 当key 不存在返回 None
当key存在时,返回第二个参数,默认第二个参数为 None
3、 dic.setdefailt() 第一个功能是添加(当key不存在的时候) 第二个功能是查询(根据你给的key)
整个执行流程:判断给的key是否存在,如果存在,就不执行新增流程,直接查询出这个key对应的value
如果key不存在,先执行新增操作,再使用key把对应的value查询出来。
遍历,字典是一个可迭代对象
a,b = 1,2 # 把后面的两个值分别赋值给前面两个变量,解构,解包
元组和列表是可以解包的
for k,v in dic.items():
print(item)
k,v = item #解构
k = item[0]
v = item[1]
print(k,v)
遍历字典的两套方案
1、使用for循环直接遍历字典
dic = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"} for key in dic: print(key) print(value)
2、可以使用字典的items() +解构可以直接获取到key 和 value
for k,v in dic.items(): print(k) print(v)
3、字典的相关操作
dic.keys() 获取到所有的键值
dic.values() 获取到所有的值
dic.items() 获取到所有的键值对
4、字典的嵌套
字典的嵌套,字典套字典
5、 set 集合
set集合是python的一个基本数据类型。set中的元素是不重复的无序的,里面的元素必须是可hash的(int,str,tuple,bool)
set 就是dic类型的数据但不保存value,只保存key set也用{}表示
注: set集合中的元素必须是可hash的,但set本身是不可hash的,set是可变的
使用set的不可重复的特性,我们可以使用set来去重
# 给 list 去重 lst =[45,6,'geg',45,6] lst = list(set(lst)) #把list转化成set,再转化回list print(lst)
6、set集合的增删改查
1、增加
s.add('元素') # 重复的内容不会被添加到set集合中
s.update('元素') #迭代更新
2、删除
item = s.pop() # 随机弹出一个
s.remove('元素') # 若这个元素不存在,删除在会报错
s.clear() #清空set集合,清空完之后,会打印为 set(),要和dic区分
3、修改
set集合中的数据没有索引,也没办法去定位一个元素,所以没有办法直接修改
我们可以采用先删除后添加的方式来完成修改操作
s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"} # 把刘嘉玲改成赵本⼭ s.remove("刘嘉玲") s.add("赵本⼭") print(s)
4、查询
set 是一个可迭代的对象,所以可以进行for循环
7、set集合的一些其他操作
交集:s1&s2 s1.intersection(s2)
并集:s1|s2 s1.union(s2)
差集 :s1 -s2 s1.difference(s2) 得到s1 中单独存在的元素
反交集(s1^s2) s1.symmetric_difference(s2) 两个集合中单独存在的元素
子集: s1 < s2 s1.issubset(s2) s1 是 s2 的子集吗?返回 True or False
超集: s1 >s2 s1 是s2 的超集吗? False or True
set集合本身是可以发生改变的,是不可hash的。我们可以用frozenset来保存数据。frozenset是不可变的,也就是一个可哈希的数据类型
s = frozenset(["赵本⼭", "刘能", "⽪⻓⼭", "⻓跪"]) dic = {s:'123'} # 可以正常使⽤了 print(dic) #{frozenset({'刘能', '⽪⻓⼭', '赵本⼭', '⻓跪'}): '123'}