一、字典概述1、字典的格式Python字典是一个可变的容器模型,可以存储任意类型的对象,如字符串、数字、元组等容器模型.字典的每个键值key=>value对用冒号:隔开,每对用逗号隔开,整个字典用花括号{}括起来,格式如下:d={key1:值1,键2:值2}2。创建字典的方法有很多种。以下方法创建的字典等于{"one":1,"two":2,"three":3}a=dict(one=1,two=2,three=3)b={'one':1,'二':2,'三':3}c=dict(zip(['一','二','三'],[1,2,3]))d=dict([('二',2),('一',1),('三',3)])e=dict({'三':3,'一':1,'二':2})f=dict({'一':1,'三':3},二=2)a==b==c==d==e==f3.字典键的属性字典值可以取任意python对象,没有限制,可以是标准对象,也可以是用户自定义的,但是key不能,有特殊要求,需要记住两点:unique性能:同一个键不允许出现两次。如果同一个键在创建过程中被分配了两次,后面的值将被记住。不可变的:key必须是不可变的,所以可以作为数字,字符串或者元组使用,所以不能作为列表,字典等使用。2.字典的11种方法print(dir(dict))['clear','copy','fromkeys','get','items','keys','pop','popitem','setdefault','update','values']1.fromkeys()说明:新建一个字典,使用序列seq中的元素作为字典的键,value为字典中所有键对应的初始值。语法:dict.fromkeys(seq[,value])参数:seq一个序列,作为字典键值列表。value可选参数,设置按键序列(seq)的值。fromkeys是创建一个新字典。就是预先创建一个空字典和一个列表。fromkeys将接收两个参数。第一个参数是一个从外部传入的可迭代对象,该元素将作为字典的键值从循环中取出。另一个参数是字典的值。value,如果不写所有的key值,对应的值为None,如果写了,就是默认值#快速生成字典seq=('Google','Baidu','淘宝')dict.fromkeys(seq){'Google':None,'Baidu':None,'Taobao':None}dict.fromkeys(seq,1){'Google':1,'Baidu':1,'淘宝':1}dict.fromkeys(range(5),88){0:88,1:88,2:88,3:88,4:88s=[1,2,3]dict.fromkeys(seq,s){'Google':[1,2,3],'百度':[1,2,3],'淘宝':[1,2,32.clear()描述:清除字典中的所有元素,得到一个空字典。返回值无语法:dict.clear()参数:NAdic={"python3":123}print(dic.clear())Nonedefmain():my_dict={'child':'rat','ugly':'cow','寅':'虎','卯':'兔','辰':'龙','巳':'蛇','午':'马','未':'羊','神':'猴子','游':'鸡','虚':'狗','海':'猪'}print('zi'inmy_dict.keys())print('rat'inmy_dict.values())print('小五哥'inmy_dict.keys())print('小五哥'inmy_dict.values())print("字典长度:%d"%len(my_dict))#清空指定字典用法my_dict.clear()print(my_dict)print("删除后的字典长度:%d"%len(my_dict))if__name__=='__main__':main()#OperationresultTrueTrueFalseFalse字典长度:12{}字典删除后长度:03.copy()描述:返回字典浅拷贝的副本语法:dict.copy()参数:无dict1={'Name':'Xiaowuge','Age':17};dict2=dict1.copy()str(dict2)"{'Name':'小乌歌','Age':17}"dict_0={'name':'小乌歌','age':18,'proerty':'shuai'}dict_0{'姓名':'小吴哥','年龄':18,'proerty':'shuai'}dict_1=dict_0.copy()dict_1{'name':'xiaowuge','age':18,'proerty':'shuai'}dict_0.update({'age':28})dict_0{'name':'xiaowuge','age':28,'proerty':'shuai'}dict_1{'name':'xiaowuge','age':18,'proerty':'shuai'注:复制python字典,浅拷贝和深拷贝的区别拷贝:和原字典完全一样浅拷贝:拷贝原字典,但是不拷贝原字典中的子对象,所以当原字典中的子对象发生变化时,浅拷贝字典也会改变。深拷贝:原字典和它的子对象一起拷贝,所以深拷贝后的字典不会和原字典发生变化。代码示例:importsysimportcopydefmain():d0={1:"a",2:"b",3:"c",4:[1,2,3]}d1=d0d2=d0.copy()d3=copy.deepcopy(d0)print("d0:",d0)print("d1:",d1)print("d2:",d2)print("d3:",d3)print("*"*10,"原始字典d0改变后")d0[1]="aa"d0[4].append(4)print("d0:",id(d0),d0)print("d1:",id(d1),d1)print("d2:",id(d2),d2)print("d3:",id(d3),d3)if__name__=="__main__":main()d0:{1:'a',2:'b',3:'c',4:[1,2,3]}d1:{1:'a',2:'b',3:'c',4:[1,2,3]}d2:{1:'a',2:'b',3:'c',4:[1,2,3]}d3:{1:'a',2:'b',3:'c',4:[1,2,3]}***********原来字典d改d0:130346024{1:'aa',2:'b',3:'c',4:[1,2,3,4]}d1:130346024{1:'aa',2:'b',3:'c',4:[1,2,3,4]}d2:130345944{1:'a',2:'b',3:'c',4:[1,2,3,4]}d3:130346344{1:'a',2:'b',3:'c',4:[1,2,3可以看出,随着d0变化,d1完全变化,d2'4:[1,2,3,4]'发生了变化,但d3没有变化。可以看出,深拷贝不受原字典变化的影响,其他情况下都会受到影响。4.get()说明:返回指定key的值,如果该值不在字典中则返回默认值语法:dict.get(key,default=None)参数:key--要查找的key在字典里。default--如果指定键的值不存在,则返回默认值None。dic={"uiui":"ioio"}dic.get('uiui')'ioio'dic.get("uiuiui","我是第二个参数,参数一中的key在字典中不存在")'我是第二个参数,参数一中的key在字典中不存在'print(dic.get("uiuiui"))None5.setdefault()描述:如果字典中不存在该键,则添加该键并将值设置为默认值。如果存在,则返回该字段的值,Python字典setdefault()函数和get()方法语法类似:dict.setdefault(key,default=None)参数:key--要查找的键值。default--键不存在时设置的默认键值。dict={'name':'Alice','age':23,'address':'杭州'}dict.setdefault('name')'Alice'print(dict){'name':'Alice','age':23,'address':'杭州'}#身高的key,看看有没有,没有就加上dict.setdefault('high',178)178dict{'name':'Alice','age':23,'address':'Hangzhou','high':17}6.keys()描述:返回列表中字典的所有键。语法:dict.keys()参数:无dict={'name':'Alice','age':23,'address':'杭州'}dict.keys()dict_keys(['name','age','address'])list(dict.keys())#转换为列表['name','age','address']7.values()描述:返回字典中所有键对应的值语法:dict.values()参数:Nonedict={'name':'Alice','age':23,'address':'杭州'}dict.values()dict_values(['Alice',23,'杭州'])dict={'nick':'帅气小王子','item':'长袖短款','price':29.99,'prov':'杭州'}dict.values()dict_values(['帅气小王子prince','长袖短款',29.99,'杭州'])8.items()描述:列表返回一个可遍历的(key,value)元组数组。语法:dict.items()参数:无dict={'name':'Alice','age':23,'address':'杭州'}dict.items()dict_items([('name','Alice'),('age',23),('address','杭州')])最后得到一个dict_items对象。这个对象也是一个可迭代对象,可以用iter方法转换成迭代器,将字典的每个键值对转换成元组dic1=iter(dict.items())foriindic1:print(i)print(type(i))#并发循环引用dict={'name':'Alice','age':23,'address':'杭州'}fori,vindict.items():print(i+':'+str(v))name:Aliceage:23address:Hangzhoumy_dict={'马云':'1000亿','马化腾':'900亿','王健林':'800亿'}fori,vinmy_dict.items():print(i+':'+v)马云:1000亿马化腾:900亿王健林:800亿9.pop()描述:顾名思义,让item对应字典中的某个key”离开”字典。语法:pop(key[,default])参数:key:要删除的key值default:如果没有key,返回默认值接受两个参数,第一个参数为key,第二个参数可选,如果如果第一个参数中的键在字典中不存在,则返回第二个参数。如果没有传入第二个参数,则抛出keyerror。dict={'name':'Alice','age':23,'address':'杭州'}dict.pop('age')23print(dict){'name':'Alice','address':'Hangzhou'}#agegone10.popitem()描述:随机删除字典中的一个键值对,并以元组的形式返回这个键值对,返回并删除最后一对键值对词典。语法:dict.popitem()参数:无注意:pop和popitem是字典中的删除操作。pop使用字典的“键”作为参数删除指定的键/值对。pop中的参数不能省略,删除字典中不存在的key/value对会报错。dict={'name':'Alice','age':23,'address':'杭州'}dict.popitem()('address','杭州')print(dict){'name':'Alice','age':23}11.update()描述:更新字典的键值对,将参数中字典中的键值对更新到字典中,该方法无返回值语法:dict.update(dict)参数:dict--添加到指定字典dict中的字典。#第一种方式dict={'name':'Alice','age':23,'address':'杭州'}dict.update({'age':80})print(dict){'name':'Alice','age':80,'address':'杭州'}#第二种方式dict.update(age=180)dict{'name':'Alice','age':180,'address':'杭州'}my_dict={'马云':'1000亿','马化腾':'900亿','王健林':'800亿'}my_dict.update(马化腾='1900亿')my_dict{'马云':'1000亿','马化腾':'1900亿','王健林':'800亿'}3.其他支持除了以上11种字典独有的方法外,还有这些字典支持的操作(自定义映射类型也应支持)(1)list(d)返回字典d中使用的所有键的列表。my_dict={'one':1,'two':2,'three':3}list(my_dict)['one','two','three'](2)len(d)返回列表中的列表字典d项目数。my_dict={'one':1,'two':2,'three':3}len(my_dict)3(3)d[key]返回d中由key键入的项目。如果映射中不存在键,则引发KeyError。my_dict['one']1(4)d[key]=value将d[key]设置为value。my_dict['one']=10my_dict{'one':10,'two':2,'three':3}(5)deld[key]从d中删除d[key]。如果映射中不存在键,则引发KeyError。my_dict={'one':1,'two':2,'three':3}delmy_dict['one']my_dict{'two':2,'three':3}(6)keyindifdin如果键key存在则返回True,否则返回False。my_dict={'one':1,'two':2,'three':3}'one'inmy_dictTrue(7)keynotind等同于notkeyind。my_dict={'one':1,'two':2,'three':3}'one'notinmy_dictFalse'小五哥'notinmy_dictTrue(8)iter(d)返回一个迭代器,它的元素是字典的键。这是iter(d.keys())的快捷方式。my_dict={'one':1,'two':2,'three':3}iter(my_dict)
