python 通关字典操作方法详解
发布日期:2021-06-29 17:34:17 浏览次数:2 分类:技术文章

本文共 5606 字,大约阅读时间需要 18 分钟。

字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字、字符串、元组,这种结构类型也称之为映射。字典类型是Python中唯一內建的映射类型。

注意,浮点数比较很不精确,因此千万不要用浮点数作为key!

 

python字典包含了11个内置方法,具体如下:

 

 

序 号  函数 描述
1 clear(self)  删除字典内所有的元素
2 copy(self) 返回一个字典的浅copy ,俗称赋值
3 fromkeys(*args,**kwargs) 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
4 get(self,k,d=None)  返回指定键的值,如果值不在字典中返回default值
5 items(self) 以列表返回可遍历的(键, 值) 元组数组
6 keys(self)  以列表返回一个字典所有的键
7 pop(self,k,d=None)  删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值
8 popitem(self)  随机返回并删除字典中的一对键和值
9 setdefault(self,k,d=None)  和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
10 update(self,E=None,**F)  把self的东西更新到外面字典
11 values(self)  以列表返回字典中的所有值

具体举例子解释如下:

1,字典的键不能是list类型:

list = [1,2,3,4]info2 = {list:'number'}结果:Traceback (most recent call last):  File "D:/字典.py", line 2, in <module>    info2 = {list:'number'}TypeError: unhashable type: 'list'

2,list/set/dict 均不可被哈希

int、float、str、tuple:是可以哈希的

1 list.__hash__;    #结果为None2 set.__hash__;     #结果为None3 dict.__hash__;     #结果为None4 print(int.__hash__);    # <slot wrapper '__hash__' of 'int' objects>5 print(float.__hash__);     #<slot wrapper '__hash__' of 'float' objects>6 print(str.__hash__);      #<slot wrapper '__hash__' of 'str' objects>7 print(tuple.__hash__);    #<slot wrapper '__hash__' of 'tuple' objects>

3,增

info ={'name':'jamnes','age':'32','work':'basketplayer'}info['sex'] = 'fale'print(info)结果:{'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'sex': 'fale'}

4,删

4-1 pop():删除指定key的键值对

info ={'name':'jamnes','age':'32','work':'basketplayer'}info.pop('work')print(info)结果:{'name': 'jamnes', 'age': '32'}

4-2 clear():清除所有的键值对

info ={'name':'jamnes','age':'32','work':'basketplayer'}info.clear()print(info)结果:{}

4-3setdefault():删除指定的元素,如果没有,则返回none

info ={'name':'jamnes','age':'32','work':'basketplayer'}info.setdefault('son')print(info)结果:None

5,改

info ={'name':'jamnes','age':'32','work':'basketplayer'}info['age']='33'print(info)结果:{'name': 'jamnes', 'age': '33', 'work': 'basketplayer'}

6,查

6-1 get():通过给定的key,查找对应的value,如果给定的可以在字典中无,则返回None

info ={'name':'jamnes','age':'32','work':'basketplayer'}a =info.get('age')print(a)结果:32

6-2 setdefault():通过给定的key,查找对应的value,如果给定的可以在字典中无,则返回None,

      同时在字典中增加’test’: None键值对

info ={'name':'jamnes','age':'32','work':'basketplayer'}a =info.setdefault('age')print(a)print(info)b =info.setdefault('sex')print(b)print(info)结果:32{'name': 'jamnes', 'age': '32', 'work': 'basketplayer'}None{'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'sex': None}

7,更新

7-1 update()=

一,更新里面有的信息,就是改变

info ={'name':'jamnes','age':'32','work':'basketplayer'}info2 = {'name':'wade','age':'33','work':'basketplayer'}info.update(info2)print(info)结果:{'name':'wade','age':'33','work':'basketplayer'}

二,更新里面没有的信息,就是添加

info ={'name':'jamnes','age':'32','work':'basketplayer'}info2 = {'honor':'3 champions'}info.update(info2)print(info)结果:{'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'honor': '3 champions'}

8,返回键,值,键值对

keys(): 以列表(list)返回字典中的所有键(key),字典是无序的,所以这个list返回的不是定义字典的顺序

**values()😗*以列表(list)返回字典中的所有值,这个list的顺序跟keys()返回的list顺序是一一对应的

**items()😗*以列表(list)返回可遍历的(键, 值) 元组数组,这个tuple的list包含了dictionary的所有数据

dict ={'k1':'v1','k2':'v2','k3':'v3'}#1,请循环遍历除所有的keyfor keys in dict.keys():    print(keys)#遍历出所有的valuefor value in dict.values():    print(value)#遍历出for key,value in dict.items():    print(key+':'+value)#结果:k1k2k3v1v2v3k1:v1k2:v2k3:v3

9,练习字典

dic={‘k1’:“v1”,“k2”:“v2”,“k3”:[11,22,33]}**

a.请循环输出所有的key

b.请循环输出所有的value

c.请循环输出所有的key和value

d.请在字典中添加一个键值对,“k4”:“v4”,输出添加后的字典

e.请在修改字典中“k1”对应的值为“alex”,输出修改后的字典

f.请在k3对应的值中追加一个元素44,输出修改后的字典

g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典

dic={'k1':"v1","k2":"v2","k3":[11,22,33]}#   a.请循环输出所有的keyfor i in dic :    print(i)for i in dic.keys():    print(i)#   b.请循环输出所有的valuefor i in dic.values():    print(i)  c.请循环输出所有的key和valuefor i,j in dic.items():    print(i,j)#   d.请在字典中添加一个键值对,"k4":"v4",输出添加后的字典dic2 = {'k4':'v4'}dic.update(dic2)print(dic)dic['k4'] = 'v4'print(dic)#   e.请在修改字典中“k1”对应的值为“alex”,输出修改后的字典dic['k1'] ='alex'print(dic)  f.请在k3对应的值中追加一个元素44,输出修改后的字典dic['k3'].append(44)print(dic)#   g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典dic['k3'].insert(0,18)print(dic)

 

**10,根据字典的键值进行排序  **

   反序: reverse = True

mylist = ['学习', '工作', '玩耍', '学习', '工作', '工作']print(mylist)# list_element 是另外一个列表,里面的内容是list_element里面的无重复项myset = set(mylist)mydict = {}for item in myset:    res = mylist.count(item)    sample = {item: res}    # print(res)    # print("the %d has found %d" % (item, mylist.count(item)))    mydict.update(sample)print(mydict)print(sorted(mydict.items(), key=lambda mydict:mydict[1],reverse=True))

11,OrderedDict 的使用 

在Python中,dict这个数据结构由于hash的特性,是无序的,这在有时候会给我们带来一些麻烦,幸运的时,在collections模块中为我们提供了 OrderedDict ,当你需要获取一个有序的字典对象时,试用它即可。

python中的字典(dict)对象可使用“键”,“值” 对的形式存取值,但默认的内置类型字典中的元素是无序的。Collections模块下的OrderedDict类实现了对字典的排序,OrderedDict是dict的一个子类,实现了对字典排序的功能,下面看一下两者数据类型的对比。

from collections import OrderedDictprint('Normal Dictionary:')d = {}d['name'] = 'v1'd['age'] = 'v2'd['job'] = 'v3'd['address'] = 'v4'd1 = {}d1['job'] = 'v3'd1['address'] = 'v4'd1['name'] = 'v1'd1['age'] = 'v2'print(d)print(d1)print(d == d1)print('OrderedDict:')d2 = OrderedDict()d2['name'] = 'v1'd2['age'] = 'v2'd2['job'] = 'v3'd3 = OrderedDict()d3['job'] = 'v3'd3['age'] = 'v2'd3['name'] = 'v1'print(d2)print(d3)print(d2 == d3)

输出结果:

Normal Dictionary:{'name': 'v1', 'age': 'v2', 'job': 'v3', 'address': 'v4'}{'job': 'v3', 'address': 'v4', 'name': 'v1', 'age': 'v2'}TrueOrderedDict:OrderedDict([('name', 'v1'), ('age', 'v2'), ('job', 'v3')])OrderedDict([('job', 'v3'), ('age', 'v2'), ('name', 'v1')])False

从结果来看,如果是普通的字典,即使传入的顺序不一样,但是依然是相同的字典;如果是OrderedDict ,传入的顺序不一样,那么得到的字典是不一样的。

IT入门 感谢关注

转载地址:https://cpython.blog.csdn.net/article/details/112777434 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:装上这 8 个插件,PyCharm才真的是无敌的存在!
下一篇:python通关 集合操作方法详解

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月23日 14时35分38秒