字典
- 字典是另一种可变容器模型,且可存储任意类型对象。无序的
- 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:d = {key1 : value1, key2 : value2 }
- 键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
dict={'a':1,'a':2,'c':3} #key值相同时,最后的一个键值对会替换前面的 print(dict) # 则输出的是 {'a': 2, 'c': 3}
#字典的value的值可以任意值 dict={ "code":10010, "data":[ 'adsderasdasd', '', 11, True, { 'data1':1, 'value':'2', 'mege':(1,2), } ], 'message':'请输入正确的数值', } print(dict) #可以正常输出 {'code': 10010, 'data': ['adsderasdasd', '', 11, True, {'data1': 1, 'value': '2', 'mege': (1, 2)}], 'message': '请输入正确的数值'}
dict1={ 1:1, 'a':2, True:3, False:4 } #key值 True、False print(dict1) # 则输出的是 {1: 3, 'a': 2, False: 4}
#为什么True输出不了 因为True 1 字典里面已经有了 1:1 # dict2={ # 1:1, # 'a':2, # [1,2,'a']:'b' # } #key值 列表 # print(dict2) #会报错 TypeError: unhashable type: 'list' dict3={ 1:1, 'a':2, (1,2,'a'):'b' } #key值 元祖 print(dict3) #可以正常输出 {1: 1, 'a': 2, (1, 2, 'a'): 'b'} 因为元祖不可变 # dict4={ # 1:1, # 'a':2, # {1:2}:'b' # } #key值 字典 # print(dict3) #会报错 TypeError: unhashable type: 'dict'
获取字典的值
#字典 dict={'a':1,'b':2,'c':3} print(dict['b']) #输出字典中key为b值 为 2 print(dict) #输出字典dict {'a': 1, 'b': 2, 'c': 3} #嵌套查询 dict1={ "code":10010, "data":[ 'adsderasdasd', '1', 11, True, { 'data1':1, 'value':'2', 'mege':(1,2), } ], 'message':'请输入正确的数值', } value=dict1['data'][4]['mege'][0] #或者元祖(1,2)里面值1 print("value===",value) #输出value=== 1
删除字典中的某个值
dict1={ "code":10010, "data":[ 'adsderasdasd', '1', 11, True, { 'data1':1, 'value':'2', 'mege':(1,2), } ], 'message':'请输入正确的数值', } del dict1["code"] print(dict1) # del dict1["data"][4]['mege'] print(dict1) del dict1["data"][4]['mege'][1] print(dict1) """ 执行结果 1、{'data': ['adsderasdasd', '1', 11, True, {'data1': 1, 'value': '2', 'mege': (1, 2)}], 'message': '请输入正确的数值'} 2、{'data': ['adsderasdasd', '1', 11, True, {'data1': 1, 'value': '2'}], 'message': '请输入正确的数值'} 3、则会报错 提示TypeError: 'tuple' object doesn't support item deletion """
循环获取字典key、value的值
dict1={ "code":10010, "data":[ 'adsderasdasd', '1', 11, True, { 'data1':1, 'value':'2', 'mege':(1,2) } ], 'message':'请输入正确的数值' } for key in dict1: print("key=",key,' ;',end='') #循环输出的key的值 print('\n') for key in dict1.keys(): print("key=",key,' ;',end='') #循环输出的key的值 print('\n') for value in dict1.values(): #循环输出value值 print("value=",value,' ;',end='') print('\n') for key in dict1.keys(): #循环输出key 和对应value值 print("%s:%s"%(key,dict1[key]),';',end='') print('\n') for key,value in dict1.items(): #循环输出key 和对应value值 print("%s:%s"%(key,value),';',end='') """ 执行结果: key= code ;key= data ;key= message ; key= code ;key= data ;key= message ; value= 10010 ;value= ['adsderasdasd', '1', 11, True, {'data1': 1, 'value': '2', 'mege': (1, 2)}] ;value= 请输入正确的数值 ; code:10010 ;data:['adsderasdasd', '1', 11, True, {'data1': 1, 'value': '2', 'mege': (1, 2)}] ;message:请输入正确的数值 ; code:10010 ;data:['adsderasdasd', '1', 11, True, {'data1': 1, 'value': '2', 'mege': (1, 2)}] ;message:请输入正确的数值 ; """
fromkeys()
dict.fromkeys(seq[, value])用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值
- seq -- 字典键值列表。
- value -- 可选参数, 设置键序列(seq)对应的值,默认为 None。
seq=('name', 'age', 'sex') dict3=dict.fromkeys(seq) print(dict3) dict3=dict.fromkeys(seq,10) print(dict3) seq1=['name', 'age', 'sex'] dict3=dict.fromkeys(seq1) print(dict3) ”“” 执行结果如下 {'name': None, 'age': None, 'sex': None} {'name': 10, 'age': 10, 'sex': 10} {'name': None, 'age': None, 'sex': None} """
清空、拷贝、删除字典
dict1={'a':1,'b':2,'c':3} dict1.clear() #清空字典 print(dict1) #输出{} dict1={'a':1,'b':2,'c':3} dict2=dict1.copy() #浅拷贝 dict1 print(dict2) #输出dict2 {'a': 1, 'b': 2, 'c': 3} dict1={'a':1,'b':2,'c':3} del_value=dict1.pop('a') #移除key为a print(dict1,del_value) #输出 {'b': 2, 'c': 3} # del_value=dict1.pop('d') #移除不存在的key, # print(dict1,del_value) #报错 KeyError: 'd' del_value=dict1.pop('d',999) #移除不存在的key,则指定999赋值给del_value print(dict1,del_value) #输出 {'b': 2, 'c': 3} 999 dict1={'a':1,'b':2,'c':3} del_value=dict1.popitem() #随机删除一对键值 print(dict1,del_value) #输出 {'a': 1, 'b': 2} ('c', 3)
get()
根据key获取value值,key不存在时,则可以指定默认值(None)
dict1={'a':1,'b':2,'c':3} #no_key=dict['d'] #则会直接报错 TypeError: 'type' object is not subscriptable no_key=dict1.get('a') print('no_key=',no_key) #输出 no_key= 1 no_key=dict1.get('d') print('no_key=',no_key) #输出 no_key= None no_key=dict1.get('e','1233') print('no_key=',no_key) #输出 no_key= 1233
setdefault()
dict.setdefault(key, default=None)和 get()方法 类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值
如果 key 在 字典中,返回对应的值。如果不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None。
dict1={'a':1,'b':2,'c':3} set_value=dict1.setdefault('a','aaa') #设置已存在的key,则不进行设置;同时获取的是当前key对应的值 print(dict1,set_value) set_value=dict1.setdefault('d','ddd')#设置不存在的key,则进行设置;同时获取的是设置的值 print(dict1,set_value)
update()
字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里
dict1={'a':1,'b':2,'c':3} dict1.update({'a':'aaa','d':'ddd'}) #更新已存在的key,则更新对应的值 ;更新不存在的key,则添加到字典 print(dict1) #{'a': 'aaa', 'b': 2, 'c': 3, 'd': 'ddd'}
# dict1={'a':1,'b':2,'c':3}
#dict1.update('a'='aaa','d'='ddd') # 报错 SyntaxError: keyword can't be an expression