当前位置: 首页 > 后端技术 > Python

Python-数据类型-字典

时间:2023-03-25 21:31:40 Python

数据类型-字典字典也是python中最常用的数据类型之一。与list或str不同,字典的定义是一个键值对,键和值之间用:分隔,多个键值对之间用分隔,键通常是不可变类型。列表不能作为key,创建方式是一对{}。1.特征字典中的key是唯一的:如果重复,后面的key会覆盖前面的key。python3.6之前的字段是无序的,3.6之后,有序字典不支持索引切片。字典是一个变量类型的例子#创建一个字典,其值为dict1={'name':'Tom','age':20,'gender':'male'}dict2=dict(name='tome',age=20,gender='male')#空字典dict3={}dict4=dict()一般把冒号前的键称为键(key),简称k;冒号后面的值是值(value),简称v。2.字典常用操作2.1添加字典就是在字典中添加一个键值对,语法字典序列[key]=value如果key存在,则修改key对应的value;如果键不存在,添加这个键值对示例dict1={'name':'Tom','age':20,'gender':'Male'}dict1['name']='Rose'print(dict1)#结果:{'name':'Rose','age':20,'gender':'male'}dict1['id']=110print(dict1)#{'name':'Rose','age':20,'gender':'male','id':110}3.2删除del:删除字典或删除字典中指定的键值对例子dict1={'name':'Tom','age':20,'gender':'Male'}deldict1['gender']print(dict1)#Result:{'name':'Tom','age':20}clear():清空字典dict1={'name':'Tom','age':20,'gender':'Male'}dict1.clear()print(dict1)#结果:{}3.3改变语法字典序列[key]=value如果key存在,则修改key对应的value;如果键不存在,添加这个键值对3.4搜索3.4.1键搜索dict1={'name':'Tom','age':20,'gender':'male'}print(dict1['name'])#Result:Tomprint(dict1['id'])#结果:报错。如果key在字典中不存在,则程序抛出异常KeyError:key3.4.2get()syntaxdictionarysequence。get(key,defaultvalue)如果当前搜索的key不存在则返回第二个参数(默认值),如果省略第二个参数则返回None,这样做的好处是程序不会抛出异常dict1={'name':'Tom','age':20,'gender':'Male'}print(dict1.get('name'))#结果:Tomprint(dict1.get('id',110))#结果:110print(dict1.get('id'))#结构:None3.4.3keys()语法字典sequence.keys()示例dict1={'name':'Tom','age':20,'gender':'Male'}print(dict1.keys())#结果:dict_keys(['name','age','gender'])用于多个组合,返回一个列表,里面存储了当前所有的kkey3字典。4.4values()语法字典sequence.values()例子dict1={'name':'Tom','age':20,'gender':'male'}print(dict1.values())#result:dict_values(['Tom',20,'male'])经常和循环结合使用,同样返回一个列表,里面存储了当前dict的所有值。3.4.5items()语法字典sequence.items()示例dict1={'name':'Tom','age':20,'gender':'Male'}print(dict1.items())#结果:dict_items([('name','Tom'),('age',20),('gender','male')])经常和循环结合使用,返回的也是一个列表,里面存储元组形式的字典的键和值4。常见的集中式字典循环遍历4.1遍历字典中的keydict1={'name':'Tom','age':20,'gender':'Male'}forkeyindict1.keys():print(key)4.2valuedict1={'name':'Tom','age':20,'gender':'Male'}forvalueindict1.values():print(value)4.3遍历字典dict1={'name':'Tom','age':20,'gender':'male'}forkey,valueindict1.items():print(f'{key}={value}')5.defaultdictdefaultdict是对collections模块字典类型的补充。它可以为字典的值设置一个类型。使用原生字典dict时,d[key]取值时,如果key不存在,程序抛出异常,KeyError异常使用defaultdict,只要传入一个默认的工厂方法,当一个key获取到不存在的,就会调用这个工厂方法,并将结果作为key的默认值Examplefromcollectionsimportdefaultdictd={}#print(d['a'])#Result:KeyError:'a'dd=defaultdict(lambda:'aaa')print(dd['key'])#结果:aaas=[('yellow',1),('blue',2),('yellow',3),('blue',4),('red',1)]d=defaultdict(list)fork,vins:d[k].append(v)print(d)#结果:defaultdict(,{'yellow':[1,3],'blue':[2,4],'red':[1]})6.OrderedDictpython3.6之前的字典是无序的。集合模块中的OrderedDict是对这个问题的补充。它可以为我们创建有序的字典。来自集合的示例importOrderedDictd={'a':3,'b':2,'c':1}dd=OrderedDict(a=1,b=2,c=3)fork,vind.items():print(k,v)"""a3c1b2"""fork,vindd.items():print(k,v)"""a1b2c3"""from集合导入OrderedDictitems=(('a',3),('b',2),('c',1))regular_dict=dict(items)ordered_dict=OrderedDict(items)fork,vinregular_dict.items():print(k,v)"""c1a3b2"""fork,vinordered_dict.items():print(k,v)"""b2c3a1"""如果原来的字典也是有序的,请注意当前python版本6.1其他方法move_to_end(key,last=True):将已有的key移动到有序的字典中要么如果last为True(默认值),end将元素移动到末尾;如果last为False,则将元素移动到开头。如果key不存在,会触发KeyError例子d=OrderedDict.fromkeys('abcde')d.move_to_end('b')print(''.join(d.keys()))#结果:acdebd.move_to_end('b',last=False)print(''.join(d.keys()))#Result:bacdepopitem(last=True):有序字典的popitem()方法取出并返回一个(key,value)键值对。如果最后一个值为True,则按后进先出顺序返回键值对,否则按先进先出顺序返回键值对。示例dd=OrderedDict(a=1,b=2,c=3)data=dd.popitem()print(data)#结果:('c',3)data=dd.popitem(last=False)print(数据)#结果:('a',1)