1、字典(dict)讲解及增删改查操作
数据类型划分:可变数据类型,不可变数据类型
不可变数据类型:元组,bool, int, str。又称可哈希
可变数据类型:list,dict,set。又称不可哈希
dict(字典)的key(键) 必须是不可变数据类型(可哈希)。它的value(值)是任意数据类型。
dict 优点:能利用二分查找去查询,速度快。
存储大量的关系型数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 dic = { 2 'name':'xiaoming', 3 'age':20, 4 'sex':'male' 5 }
1.2、增
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #增: 2 #1、 3 #1.1、增加原先没有的 4 dic['height'] = 180 5 print(dic) 6 #result: 7 #{'name': 'xiaoming', 'age': 20, 'sex': 'male', 'height': 180} 8 #1.2、覆盖原先的 9 dic['age'] = 18 10 print(dic) 11 #result: 12 #{'name': 'xiaoming', 'age': 18, 'sex': 'male', 'height': 180} 13 #2、setdefault对于已有的键值,更改不采取任何操作,对于没有的键值,更改才有效果 14 ''' 15 dic.setdefault('weight')#后面不加值,则默认为None 16 print(dic) 17 ''' 18 #result: 19 #{'name': 'xiaoming', 'age': 18, 'sex': 'male', 'height': 180, 'weight': None} 20 dic.setdefault('weight',130) 21 print(dic) 22 #result: 23 #{'name': 'xiaoming', 'age': 18, 'sex': 'male', 'height': 180, 'weight': 130}
1.3、删
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #删 2 #1、 3 print(dic.pop('weight'))#130,说明字典中pop也有返回值 4 print(dic) 5 #result: 6 #{'name': 'xiaoming', 'age': 18, 'sex': 'male', 'height': 180} 7 8 #若删除一个字典里面没有的键,会报错,如: 9 ''' 10 dic.pop('hobby') 11 ''' 12 #这时,若我们不知道有没有这个见,但是我们有想删除它,只需要在后面加一点提示即可,如: 13 print(dic.pop('hobby',None))#在控制台,会打印出来这个None 14 15 #2、 popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。 16 dic1 = { 17 'name':'xiaoming', 18 'age':20, 19 'sex':'male', 20 'height':180, 21 'hobby':'football', 22 'school':'PeKing University', 23 'hometown':'anhui' 24 } 25 print(dic1.popitem())#有返回值 26 print(dic1) 27 dic1.popitem() 28 print(dic1) 29 dic1.popitem() 30 print(dic1) 31 dic1.popitem() 32 print(dic1) 33 #result: 34 #{'name': 'xiaoming', 'age': 20, 'sex': 'male', 'height': 180, 'hobby': 'football', 'school': 'PeKing University'} 35 # {'name': 'xiaoming', 'age': 20, 'sex': 'male', 'height': 180, 'hobby': 'football'} 36 # {'name': 'xiaoming', 'age': 20, 'sex': 'male', 'height': 180} 37 # {'name': 'xiaoming', 'age': 20, 'sex': 'male'} 38 39 #3、del 40 dic2 = { 41 'name':'xiaoming', 42 'age':20, 43 'sex':'male' 44 } 45 del dic2['age']#若删除没有的键,则报错,故尽量用pop方法 46 print(dic2) 47 #result: 48 #{'name': 'xiaoming', 'sex': 'male'} 49 50 #4、clear:清空 51 dic3 = { 52 'name':'xiaoming', 53 'age':20, 54 'sex':'male' 55 } 56 dic3.clear() 57 print(dic3) 58 #result: 59 #{}
1.4、改
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #改 2 #1、覆盖 3 dic4 = { 4 'name':'xiaoming', 5 'age':20, 6 'sex':'male' 7 } 8 dic4['age'] = '18' 9 print(dic4) 10 11 #2、update 12 dic5 = { 13 'name':'xiaoming', 14 'age':20, 15 'sex':'male' 16 } 17 dic6 = { 18 'name':'daming', 19 'height':180 20 } 21 dic5.update(dic6)#已有键值则覆盖,没有的键值则添加 22 print(dic5) 23 #result: 24 #{'name': 'daming', 'age': 20, 'sex': 'male', 'height': 180}
1.5、查
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #查 2 dic7 = { 3 'name':'xiaoming', 4 'age':20, 5 'sex':'male' 6 } 7 print(dic7.keys()) 8 print(dic7.values()) 9 print(dic7.items()) 10 print(dic7['name'])#缺点:若没有这个键,则报错 11 print(dic7.get('name'))#print(dic7.get('name1',None))若没有这个键,则给出提示 12 #result: 13 #dict_keys(['name', 'age', 'sex']) 14 # dict_values(['xiaoming', 20, 'male']) 15 # dict_items([('name', 'xiaoming'), ('age', 20), ('sex', 'male')]) 16 # xiaoming 17 # xiaoming 18 19 #先看一下一个对a,b赋值,并打印出来的例子。 20 a,b=1,2 21 print(a,b) 22 a,b=[1,2]#列表 23 print(a,b) 24 a,b=(1,2)#元祖 25 print(a,b) 26 #result: 27 #1 2 28 #1 2 29 #1 2 30 31 #打印出来的是一个元祖 32 for i in dic7.items(): 33 print(i) 34 #result: 35 #('name', 'xiaoming') 36 #('age', 20) 37 #('sex', 'male') 38 39 #如果想要打印每一个键值,而不是元祖,该怎么做呢?参考上面对a,b的赋值 40 for k,v in dic7.items(): 41 print(k,v) 42 # result: 43 # name xiaoming 44 # age 20 45 # sex male
2、字典的嵌套
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 dic = { 2 'name':['xiaoming','daming','xiaohong'], 3 'age':[18,19,20], 4 'class':{ 5 'teacher':'xiaowang', 6 'age':50, 7 'sex':'male' 8 } 9 } 10 #将'daming'改为'DAMING' 11 dic['name'][1] = dic['name'][1].upper() 12 print(dic) 13 14 #在class字典中添加一个键值:'subject':Chinese 15 dic['class'] ['subject'] = 'Chinese' 16 print(dic)