字典的初识
-
what:容器型数据类型:dict
-
how:
-
数据类型的分类(可变与不可变):
-
#01 可变(不可哈希)的数据类型:list dict set
-
#02 不可变(可哈希)的数据类型:str,int(常用) tuple.bool
-
-
字典:{}括起来,以键值对存储的数据类型
-
键必须是不可变的数据类型,而且是唯一的
-
值可以是任意数据类型,对象
-
字典在3.5版本之前(包括3.5)是无序的
-
字典在3.6.x会按照初次建立字典的顺序排列,学术上不认为是有序的
-
字典的优点:查询速度快,存储关联性的数据
-
字典的查询速度非常快,简单解释一下原因:字典的键值对会存在一个散列表(稀疏数组)这样的空间中,每一个单位称作一个表元,表元里面记录着key:value,如果你想要找到这个key对应的值,先要对这个key进行hash获取一串数字咱们简称为门牌号(非内存地址),然后通过门牌号,确定表元,对比查询的key与被锁定的key是否相同,如果相同,将值返回,如果不同,报错。(这里只是简单的说一下过程,其实还是比较复杂的。)
-
-
字典的缺点:以空间换时间
-
-
字典的使用
字典的创建方式
#方式一:元组的拆包 dic = dict((('one',1),('two',2),('three',3))) print(dic) #{'three': 3, 'one': 1, 'two': 2} #方式二: dic = dict(one=1,two=2,three=3) print(dic) #方式三:官方写法 dic = dict({'one':1,'two':2,'three':3}) print(dic) #验证字典的合法性: dic = {[1,2,3]:'alex',1:666} print(dic) #TypeError: unhashable type: 'list'
字典的增删改查
增
1 dic = {'name':'taibai','age':18} 2 # dic['sex'] = 'nan' 3 # dic['age'] = 23 #直接增加,有则改之,无则新增 4 # print(dic) #{'name': 'taibai', 'age': 23, 'sex': 'nan'} 5 6 dic.setdefault('hobby',['basketball','xiaqi','zhinan']) #有则不变,无则新增 7 # dic.setdefault('age',23) #{'name': 'taibai', 'hobby': 'basketball', 'age': 18} 8 # print(dic) #{'sex': 'nan', 'name': 'taibai', 'hobby': 'basketball', 'age': 23}
删 pop clear del
1 #pop 按照键删除键值对 2 # ret = dic.pop('age') 3 # print(ret) #18 4 # #若删除键不存在,则返回提示 5 # ret = dic.pop('sex','没有此键') 6 # print(ret) #没有此键 7 8 # clear 9 # dic.clear() 10 # print(dic) #{} 11 12 13 #del 14 del dic['age'] 15 print(dic) #{'name': 'taibai', 'hobby': 'basketball'}
改
1 dic['name'] = 'alex' 2 print(dic) #{'name': 'alex', 'hobby': 'basketball'}
查
print(dic['hobby']) #不建议用此方法 ret = dic.get('hobby') print(ret) ret2 = dic.get('hobby1','查无此人') print(ret2) #keys(),values() print(dic.keys(),dic.values(),list(dic.keys())) for key in dic: print(dic[key]) for key in dic.keys(): print(dic[key]) for value in dic.values(): print(value) #items for i in dic.items(): print(i,type(i)) #('hobby', ['basketball', 'xiaqi', 'zhinan']) <class 'tuple'> for a,b in dic.items(): print(a,b,type(a)) #name alex <class 'str'> hobby ['basketball', 'xiaqi', 'zhinan'] <class 'str'>
字典的嵌套
1 #字典嵌套列表 2 #练习一 3 dic = { 4 'name':'wangfeng', 5 'age':48, 6 'wife':[{'name':'zhangziyi','age':38}], 7 'children':{'girl_first':'xiaoping','girl_second':'xiaoyi','girl_three':'xingxing'} 8 } 9 10 #1.输出wangfeng 11 print(dic.get('name')) 12 #2.输出wife键对应的值 13 print(dic.get('wife')) 14 #3.输出zhagnziyi 15 print(dic.get('wife')[0].get('name')) 16 #4.输出第三个女儿的名字 17 print(dic.get('children').get('girl_three')) 18 19 #练习二 20 dic1 ={ 21 'name':['alex',2,3,5], 22 'job':'teacher', 23 'class':{'alex':['python','python2',100]} 24 } 25 26 dic1['name'].append('wusir') 27 print(dic1) #{'job': 'teacher', 'name': ['alex', 2, 3, 5, 'wusir'], 'class': {'alex': ['python', 'python2', 100]}} 28 dic1['name'][0] = dic1['name'][0].capitalize() 29 print(dic1) 30 dic1['class']['lnh'] = 'linux' 31 print(dic1) 32 dic1['class']['alex'].pop(1) 33 print(dic1)
#练习三
将字符串 'k:1|K1:2|k2:3|K3:4' 转换为字典 {'K1': 2, 'K3': 4, 'k': 1, 'k2': 3}
msg = 'k:1|K1:2|k2:3|K3:4'
dic = {}
msg_list = msg.strip().split('|')
for i in msg_list:
key,value = i.split(':')
dic[key] = int(value)
print(dic) # {'K1': 2, 'K3': 4, 'k': 1, 'k2': 3}