一.初始字典
why:目前已经学习了容器型数据类型有list和tuple,list够用吗,有什么缺点1.列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢
2.列表只能按照顺序存储,数据与数据之间的关联性不强
所以针对以上的缺点,需要引入另一种容器型的数据类型,解决上面的问题,这就需要dict字典。
what:
数据类型可以按照多种角度进行分类,就跟咱们人一样,人按照地域可以划分分为亚洲人,欧洲人,美洲人等,但是按照肤色又可以分为白种人,黄种人,黑种人,等等,数据类型可以按照不同的角度进行分类,先给大家按照可变与不可变的数据类型的分类:
不可变(可哈希)的数据类型:int,str,bool,tuple。
可变(不可哈希)的数据类型:list,dict,set。
字典是Python语言中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的:
Key:不可变(可哈希)的数据类型.并且键是唯一的,不重复的。
Value:任意数据(int,str,bool,tuple,list,dict,set),包括后面要学的实例对象等。
在Python3.5版本(包括此版本)之前,字典是无序的。
在Python3.6版本之后,字典会按照初建字典时的顺序排列(即第一次插入数据的顺序排序)。
当然,字典也有缺点:他的缺点就是内存消耗巨大。
二.字典的几种创建方法
# 字典 # 方法一:使用list或者tuple来创建 dic = dict([('name', 'huangping'), ('city', 'hangzhou'), ('hobby', ['电脑', '手机'])]) # dic = dict((('name','huangping'),('city','hangzhou'),('hobby',['电脑','手机']))) print(dic) # 方法二: dic = dict(one=1, two=2, three=3) print(dic) # 方法三: dic = dict({'one': 1, 'two': 2, 'three': 3}) # dic = {'one': 1, 'two': 2, 'three': 3} print(dic) # 方法四: 后面会讲到先了解 dic = dict(zip(['one', 'two', 'three'],[1, 2, 3])) print(dic) # 方法五: 字典推导式 后面会讲到 # dic = { k: v for k,v in [('one', 1),('two', 2),('three', 3)]} # print(dic) # 方式六:利用fromkey后面会讲到。 # dic = dict.fromkeys('abcd','太白') # print(dic) # {'a': '太白', 'b': '太白', 'c': '太白', 'd': '太白'}
# 不合法 # dic = {[1, 2, 3]: '周杰伦'} # list是可变的. 不能作为key # dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不能作为key # dic = {{1, 2, 3}: '呵呵呵'} # set是可变的, 不能作为key
三.字典的增删改查
增
#字典的增删改查 dic = {'name': '黄平', 'city': '杭州', 'age': 31} #方法一:通过键值对直接增加 dic['hobby'] = '上网' #key 存在这是改,不存在则是增加 dic['age'] = 18 print(dic) 结果: {'name': '黄平', 'city': '杭州', 'age': 18, 'hobby': '上网'} #方法二:setdefault dic.setdefault('hobby','shangwang') # key 存在则不变,key不存在则添加,后面的参数为新增的key的value,不写value这默认value为None print(dic) dic.setdefault('city','上海') print(dic) ret = dic.setdefault('city','上海') # 有返回值 print(ret) 结果: {'name': '黄平', 'city': '杭州', 'age': 31, 'hobby': 'shangwang'} {'name': '黄平', 'city': '杭州', 'age': 31, 'hobby': 'shangwang'} 杭州
删
dic = {'name': '黄平', 'city': '杭州', 'age': 31} #方法一:pop 根据可以删除 dic.pop('age') # 默认情况key 值不存在会报错 ret = dic.pop('hobby','key不存在') #加上第二个参数,key不存在不会报错,会有返回值,key 存在则返回value值 print(ret) print(dic) 结果: key不存在 {'name': '黄平', 'city': '杭州'} #方法二:clear 清空 dic.clear() print(dic) 结果: {} #方法三:del del dic['name'] print(dic) del dic #删除整个字典 print(dic)
改
dic = {'name': '黄平', 'city': '杭州', 'age': 31} dic['name'] = '小白' print(dic) 结果: {'name': '小白', 'city': '杭州', 'age': 31} # update dic = {'name': '太白', 'age': 18} dic.update(sex='男', height=175) print(dic) # {'name': '太白', 'age': 18, 'sex': '男', 'height': 175} dic = {'name': '太白', 'age': 18} dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')]) print(dic) # {'name': '太白', 'age': 18, 1: 'a', 2: 'b', 3: 'c', 4: 'd'} dic1 = {"name":"jin","age":18,"sex":"male"} dic2 = {"name":"alex","weight":75} dic1.update(dic2) print(dic1) # {'name': 'alex', 'age': 18, 'sex': 'male', 'weight': 75} print(dic2) # {'name': 'alex', 'weight': 75}
查
dic = {'name': '黄平', 'city': '杭州', 'age': 31} # 通过键值查 print(dic['name']) # 黄平,键值不存在则报错 # 通过get print(dic.get('name','值不存在')) #键存在,则返回value,键值不存在,如果第二个参数为空值返回None ,不为空则返回参数值 # keys 返回键值 for key in dic.keys(): print(key) 结果: name city age # values 返回value for value in dic.values(): print(value) 结果: 黄平 杭州 31 # item 返回key和value for key,value in dic.items(): print(key,value) 结果: name 黄平 city 杭州 age 31
相关练习:
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]} # 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典 dic['k4'] = 'v4' print(dic) # 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典 dic['k1'] = 'alex' print(dic) # 请在k3对应的值中追加一个元素 44,输出修改后的字典 dic['k3'].append(44) print(dic) # 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典 dic['k3'].insert(0,18) print(dic) 结果: D:\pythonProject\python3\venv\Scripts\python.exe D:\pythonProject\python3\day10\s1.py {'k1': 'v1', 'k2': 'v2', 'k3': [11, 22, 33], 'k4': 'v4'} {'k1': 'alex', 'k2': 'v2', 'k3': [11, 22, 33], 'k4': 'v4'} {'k1': 'alex', 'k2': 'v2', 'k3': [11, 22, 33, 44], 'k4': 'v4'} {'k1': 'alex', 'k2': 'v2', 'k3': [18, 11, 22, 33, 44], 'k4': 'v4'}
四.字典的嵌套
典的嵌套是非常重要的知识点,这个必须要建立在熟练使用字典的增删改查的基础上,而且字典的嵌套才是咱们在工作中经常会遇到的字典,工作中遇到的字典不是简简单单一层,而就像是葱头一样,一层接一层,但一般都是很有规律的嵌套,那么接下来我们就学习一下字典的嵌套:
dic = { 'name':'汪峰', 'age':48, 'wife':[{'name':'国际章','age':38}], 'children':{'girl_first':'小苹果','girl_second':'小怡','girl_three':'顶顶'} } # 1. 获取汪峰的名字。 print(dic['name']) # 2.获取这个字典:{'name':'国际章','age':38}。 print(dic['wife'][0]) # 3. 获取汪峰妻子的名字。 print(dic['wife'][0]['name']) # 4. 获取汪峰的第三个孩子名字。 print(dic['children']['girl_three']) 结果: D:\pythonProject\python3\venv\Scripts\python.exe D:\pythonProject\python3\day10\s1.py 汪峰 {'name': '国际章', 'age': 38} 国际章 顶顶
练习:
dic1 = { 'name':['alex',2,3,5], 'job':'teacher', 'oldboy':{'alex':['python1','python2',100]} } # 1,将name对应的列表追加⼀个元素’wusir’。 dic1['name'].append('wusir') print(dic1) # 2,将name对应的列表中的alex⾸字⺟⼤写。 dic1['name'][0] = dic1['name'][0].title() print(dic1) # 3,oldboy对应的字典加⼀个键值对’⽼男孩’,’linux’。 dic1['oldboy']['老男孩'] = 'linux' print(dic1) # 4,将oldboy对应的字典中的alex对应的列表中的python2删除 dic1['oldboy']['alex'].remove('python2') print(dic1) 结果: D:\pythonProject\python3\venv\Scripts\python.exe D:\pythonProject\python3\day10\s1.py {'name': ['alex', 2, 3, 5, 'wusir'], 'job': 'teacher', 'oldboy': {'alex': ['python1', 'python2', 100]}} {'name': ['Alex', 2, 3, 5, 'wusir'], 'job': 'teacher', 'oldboy': {'alex': ['python1', 'python2', 100]}} {'name': ['Alex', 2, 3, 5, 'wusir'], 'job': 'teacher', 'oldboy': {'alex': ['python1', 'python2', 100], '老男孩': 'linux'}} {'name': ['Alex', 2, 3, 5, 'wusir'], 'job': 'teacher', 'oldboy': {'alex': ['python1', 100], '老男孩': 'linux'}}
标签:alex,name,age,dic,print,字典 From: https://www.cnblogs.com/zhazhadba/p/16917623.html