字典的常用操作及练习
dic1 = {'name':'whw','age':22,'sex':'male'} dic2 = {'name':'whw'} ##注意,字典时无序的,没有要求字典排序 ''' 特别注意:字典没有remove方法!!只有列表有remove方法! ''' #创建一个字典——dict.fromkeys() dic3 = dict.fromkeys(['name1','name2','name3'],'whw1') print(dic3)#{'name1': 'whw1', 'name2': 'whw1', 'name3': 'whw1'} #增 #setdefault 在字典中添加键值对,如果只有键那对应的值是none,但是如果原字典中存在设置的键值对,则他不会更改或者覆盖 dic1.setdefault('k','v') print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male', 'k': 'v'} dic1.setdefault('k','v1') print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male', 'k': 'v'} ##添加键值对 dic1['n'] = 'm' print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male', 'k': 'v', 'n': 'm'} #删 ''' del dic2 print(dic2)#会报错——NameError: name 'dic2' is not defined ''' # 清空字典 print('dic1:',dic1)#dic1: {'name': 'whw', 'age': 22, 'sex': 'male', 'k': 'v', 'n': 'm'} dic2.clear() print(dic2) # {} #pop方法——pop(key,'无key返回的值')————返回删除的“值” print(dic1.pop('k')) #v print(dic1.pop('w','没有这个键')) #没有这个键 #popitem()方法———— ''' # 3.5之前随机删除字典中的某个键值对,并将删除的键值对以元组的形式返回 # 3.6之后删除的是最后的键值对 ''' print(dic1.popitem())#('n', 'm') print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male'} #改 #update方法——字典的扩展 dic3 = {'a1':'b'} dic1.update(dic3) print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male', 'a1': 'b'} #找到对应的键直接改 dic3['a1'] = 123 print(dic3)#{'a1': 123} ###查 print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male', 'a1': 'b'} print(dic1.get('name'))#whw print(dic1.get('whw','没有这个key'))#没有这个key #查出所有的key d1 = dic1.keys() print(d1)#dict_keys(['name', 'age', 'sex', 'a1']) print(type(d1))#<class 'dict_keys'> print(list(d1))#['name', 'age', 'sex', 'a1'] #查出所有的键值对 d2 = dic1.items() print(d2)#dict_items([('name', 'whw'), ('age', 22), ('sex', 'male'), ('a1', 'b')]) #查出所有的值 d3 = dic1.values() print(d3)#dict_values(['whw', 22, 'male', 'b']) ##字典的遍历 #i是序号,默认是0 #v是字典的键 for i,v in enumerate(dic1,1): print(i,v,dic1[v]) #或者可以这样:但是没有数字了 for k,v in dic1.items(): print(k,v) ##练习 ###一行操作改变dic11字典: dic11 = {'k1':'v111','a1':'b'} dic111 = {'k1':'v1','k2':'v2','k3':'v3'} dic11.update(dic111) print(dic11)#{'k1': 'v1', 'a1': 'b', 'k2': 'v2', 'k3': 'v3'} print(dic11.update(dic111))#None
练习
###python3.5(包括3.5之前)字典是无序的 ###python3.6之后字典是有序的 ###字典的优点: #字典可存储大量的关系数据 #字典的查询的速度特别快 #注意,如果字典的两个键一样了,取后面的 # dicc = { # 'name':'Alex', # 'name':'wanghw', # 'age':22 # } # print(dicc)#{'name': 'wanghw', 'age': 22} dic1 = {'name':'wanghw','age':22,'sex':'male'} dic2 = {'name':'whw'} #——字典是无序的,没有要求字典排序 dic3 = dict.fromkeys(['name1','name2','name3'],'whw') print(dic3) ##################### #增 ##添加键值对 dic2['age'] = 18 print(dic2) ##setdefault 在字典中添加键值对,如果只有键那对应的值是none,但是如果原字典中存在设置的键值对,则他不会更改或者覆盖 dic2.setdefault('k','v') print(dic2)#{'name': 'whw', 'age': 18, 'k': 'v'} # 如果原字典中存在设置的键值对,则他不会更改或者覆盖 dic2.setdefault('k',123) print(dic2)#{'name': 'whw', 'age': 18, 'k': 'v'} ####################### #删 ##del ##clear ##pop——pop(key,'无key返回的值')————返回删除的“值” print(dic2.pop('k')) print(dic2.pop('w','没有这个键')) ##popitem——随机删除字典中的某个键值对,并将删除的键值对以元组的形式返回 print(dic3.popitem()) print(dic3) ####################### #改 ##扩展——update————存在的键值对“覆盖”、不存在的键值对添加到最后 dic3 = {'a1':'b'} dic1.update(dic3) print(dic1) ''' 注意如果update的字典有共同的键,则"更新"了: dict1 = {'k1':'v111','a1':'b'} dict2 = {'k1':'v1','k2':'v2','k3':'v3'} dict1.update(dict2) print(dict1)#{'k1': 'v1', 'a1': 'b', 'k2': 'v2', 'k3': 'v3'} ''' ##找到对应的值直接改 dic1['a1'] = 'A' print(dic1) ###################### #查 ##直接指定键——不好,没有回报错 print(dic1['name']) # print(dic1['name1'])#没有的话会报错 ##get方法 print(dic1.get('name')) print(dic1.get('name1','没有这个键'))#没有的话不会报错,默认返回None ##查出所有的key print(dic1.keys()) print(type(dic1.keys()))#<class 'dict_keys'> ###可以转化成列表 print(list(dic1.keys()))#['name', 'age', 'sex', 'a1'] ##查出所有键值对——元组形式返回 print(dic1.items())#dict_items([('name', 'wanghw'), ('age', 22), ('sex', 'male'), ('a1', 'A')]) ##查出所有值 print(dic1.values())#dict_values(['wanghw', 22, 'male', 'A']) ###################### ##字典的遍历——enumerate:i默认从0开始,v是字典的键 for i,v in enumerate(dic1): print(i,v,dic1[v]) ''' 0 name wanghw socketserver模块-循环接收0 age 22 2 sex male 3 a1 A ''' #或者可以这样: for i,v in enumerate(dic1.items()): print(i,v) ''' 0 ('name', 'wanghw') socketserver模块-循环接收0 ('age', 22) 2 ('sex', 'male') 3 ('a1', 'A') ''' #还可以这样: for k,v in dic1.items(): print(k,v) ''' name wanghw age 22 sex male a1 A ''' ###练习 ###一行操作改变dic11字典: dict1 = {'k1':'v111','a1':'b'} dict2 = {'k1':'v1','k2':'v2','k3':'v3'} dict1.update(dict2) print(dict1)#{'k1': 'v1', 'a1': 'b', 'k2': 'v2', 'k3': 'v3'} # dict2.update(dict1) # print(dict2)