一、字典---存储多个数据的无序的 可变的 以键值对表示的数据类型
字典表示
1.字典的定义 dictionary
2.关键字 dict 除列表以外python之中最灵活的内置数据结构类型,字典是无序的对象集合
3.字典用{}标识
4.字典是无序的对象集合
5.用key:value 的形式存储数据 键值对的方式 {key: value, key1: value1, key2: value2}
注:列表存储多个数据的时候,并不知道元素具体表示的含义。
字典:用key:value ,可以表示出每个元素的具体含义
dict1 = {'name':'Lili','age':'18','gender':'girl'}
6.字典 key的硬性要求:
key:是唯一的且不可变的数据(int float tuple boolen str)除此以外,其他的类型都不支持做key(列表,字典不能作为key,因为它们是可变的)
value:任何数据类型都支持
注:key大多数都是用str
如果报错类型是unhashable,说明key是可变的类型,要修改key的类型.
字典的常用操作
1.空字典
d = {}
2.定义一个字典
不能用字典 列表作key
#定义一个字典 key:value d={1:(1,2,3),0.02:False,True:'result','name':0.02}#True也可表示1,所有输出结果,1:'result' print(d)
结果:{1: 'result', 0.02: False, 'name': 0.02}#多次输出结果的顺序都是不一样的,体现无序
❤字典的key必须是唯一的不重复的,如果出现重复的,后面的值会把前面的值覆盖掉。上例中的1等同与True,后面的‘result’会把前面的(1,2,3)给覆盖掉
❤ 报keyerror 说明字典的key有问题
3.字典的取值:根据key取值,没有索引,没有切片(因为有索引,就代表有顺序,列表,元组是有序的,字典是无序的)
无序:就无法通过索引取值
取值:根据key取值,即字典名[key]
python3.8版本,字典的无序做了优化,老版本3.3,每次运行结果的顺序是一样的。
d={1:(1,2,3),0.02:False,True:'result','name':0.02}#True也可表示1,所有输出结果,1:'result' print(d[0.02])
结果:False
4.字典的长度
dict1 = {'name':'Lili','age':'18','gender':'girl'} print(len(dict1)) #3
5.字典的基本操作------增删改查,都是根据key来操作
①查:根据key来查询
d={'python':'29期','teacher':['华华','yuze','妮妮'],'vip':{1:'小李',2:'小张',3:'小赵'}}
print(d['vip'])
print(d['vip'][2])
print(d['teacher'][1])
结果:
{1: '小李', 2: '小张', 3: '小赵'}
小张
yuze
②增 d[不存在的key]=新值
③改 d[存在的key]=新值
主要区别就是key是不是已存在的,存在就是改,不存在就是增
d={'python':'29期','teacher':['华华','yuze','妮妮'],'vip':{1:'小李',2:'小张',3:'小赵'}}
d['vip']='vip学员'
d['total']=999
print(d)
结果:{'python': '29期', 'teacher': ['华华', 'yuze', '妮妮'], 'vip': 'vip学员', 'total': 999}
④删除
d.pop()(注意,是按照key来删除,其次没有列表里面默认删除最后一个的操作!!!)
d.pop('vip')#根据key来删除
d.clear() 清空字典
d.popitem() 随机删除某个键值对
6.字典的方法函数
①keys() 把字典的所有key放在一个列表里,以元组方式输出
②values() 把字典的所有value值放在一个列表里,以元组的方式输出
③items() 字典的中每个键值对放在一个元组里,元组再放在一个列表里,最后以元组方式输出
dict1 = {'name':'python','clasee':29,'year':2020} print(dict1.keys()) print(dict1.values()) print(dict1.items())
结果:
dict_keys(['name', 'clasee', 'year'])
dict_values(['python', 29, 2020])
dict_items([('name', 'python'), ('clasee', 29), ('year', 2020)])
7.字段的运算:减法运算、与运算
d1 = {1: 11, 2: 22} d2 = {1: 11, 2: 31, 3: 44} c = d1.items() - d2.items() # d1中删除跟d2相同的key:value,剩余的是返回值 e = d2.items() - d1.items() # d2中删除跟d1相同的key:value,剩余的是返回值 d = d1.items() & d2.items() # d1 跟 d2的交集(与运算) print(c) # {(2, 22)} print(e) # {(2, 31), (3, 44)} print(d) # {(1, 11)}
灵活拷问:
什么时候用字典?字典是用来存储数据的
如果是顺序比较重要的,可修改的,就用列表。如果是可读性比较重要的,就用字典。(当值是用来成对存储的时候,例如,学生对应的成绩)
举例:测试登录,注册场景,设计测试用例。
数据分析:
登录地址 方法 数据
/login GET caojuan
register POST longlong
case = [
{'url':'/login','method':'GET','data:'caojuan'},
{............},
{.............}
]
二、元组---不可变
1.元组的表示:()
2.元组与列表一样,也是一种序列,唯一不同的是元组不能修改。
创建和访问元组(元组最重要的是小括号()、逗号)
1.空元组()
2.不带小括号的元组
tuple1 = 1,2,3
3.带小括号的元组
tuple2 = (1,2,3,4)
❤❤注意:元组中只有一个元素,需要加上逗号;不加逗号的话,其数据类型就是这个元素的数据类型,不是元组了。
4.一个元素的元组
names = ('hello') == 'hello'
print(len(names)) #5
#加逗号 names = ('hello', ) print(len(names)) # 1 print(type(names)) # tuple
5.元组的重复
tuple3 = (8,) print(tuple3*8)#(8, 8, 8, 8, 8, 8, 8, 8)
(8,)是元组,此时的*不是乘号,而是重复操作符。
索引、更新和删除元组
1.元组是有序的,可以通过索引操作
tuple4 = ('polo','Emma','Dinal','Jones') print(tuple4[2]) #Dinal
2.元组是不可修改的序列,又怎么进行更新呢?------利用切片方式,实现元组的连接
#在'Emma'和'Dinal'之间插入'Lili' tuple4 = ('polo','Emma','Dinal','Jones') tuple4 = tuple4[:2] + ('Lili',) + tuple4[2:] print(tuple4) # ('polo', 'Emma', 'Lili', 'Dinal', 'Jones')
3.删除元组 del
4.元组的拆包,解包
a, b, c = ('hello', 'love', 'python') print(a) #hello print(b) #love print(c) #python
❤ 赋值号= 前面的变量(a,b,c)的个数与元组的元素个数一定要相同,否则会报错
元组的相关操作符
1.重复操作符*(8 *(8,))
2.逻辑操作符 and or
3.成员关系操作符 in, not in
4,拼接操作符+(拼接操作符两边的元素类型要一致)
5,关系操作符(>, >=,<,<=)
什么时候用元组
1.在信息不能进行修改的情况下,用元组
2.元组的性能要强于列表(测试的时候感受不到,基本上用列表就够 了)
三、集合 set
1.集合的表示方法 :{ }
{“hello”,“python”,“lemon”,”vip”}
2.集合与字典的区别;集合是没有key的
my_set = {'hello','python','lemon','vip'} print(my_set) #{'lemon', 'hello', 'python', 'vip'} print(len(my_set))# 4
3.集合是无序的 可变 ====→不能索引
可以通过内置函数()来操作,暂时不讲。
4. ❤集合的主要作用:去重
set会把重复的元组覆盖掉
my_set = {'hello','python','lemon','vip','python','hello','python'} print(my_set) #{'python', 'vip', 'lemon', 'hello'} print(len(my_set)) #4
面试题:
把下面的列表去除重复元素
list1=['hello','python','lemon','vip','python','hello','python'] print(list(set(list1))) #['python', 'vip', 'lemon', 'hello'] 集合去重后是无序的,顺序是变化的