python 字典操作方法详解
字典是一种通过名字或者关键字引用的得数据结构,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类型:
1 2 3 4 5 6 7 8 | 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 2 3 4 5 6 7 8 9 10 11 12 13 14 | 1 list .__hash__; #结果为None 2 set .__hash__; #结果为None 3 dict .__hash__; #结果为None 4 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,增
1 2 3 4 5 | 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的键值对
1 2 3 4 5 | info = { 'name' : 'jamnes' , 'age' : '32' , 'work' : 'basketplayer' } info.pop( 'work' ) print (info) 结果: { 'name' : 'jamnes' , 'age' : '32' } |
4-2 clear():清除所有的键值对
1 2 3 4 5 | info = { 'name' : 'jamnes' , 'age' : '32' , 'work' : 'basketplayer' } info.clear() print (info) 结果: {} |
4-3setdefault():删除指定的元素,如果没有,则返回none
1 2 3 4 5 | info = { 'name' : 'jamnes' , 'age' : '32' , 'work' : 'basketplayer' } info.setdefault( 'son' ) print (info) 结果: None |
5,改
1 2 3 4 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
1 2 3 4 5 | info = { 'name' : 'jamnes' , 'age' : '32' , 'work' : 'basketplayer' } a = info.get( 'age' ) print (a) 结果: 32 |
6-2 setdefault():通过给定的key,查找对应的value,如果给定的可以在字典中无,则返回None,
同时在字典中增加'test': None键值对
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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-1update()=
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 一,更新里面有的信息,就是改变 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的所有数据
1 2 3 4 5 6 7 8 9 10 11 12 | dict = { 'k1' : 'v1' , 'k2' : 'v2' , 'k3' : 'v3' } #1,请循环遍历除所有的key for keys in dict .keys(): print (keys) #遍历出所有的value for value in dict .values(): print (value) #遍历出 for key,value in dict .items(): print (key + ':' + value)<br> #结果:<br>k1<br>k2<br>k3<br>v1<br>v2<br>v3<br>k1:v1<br>k2:v2<br>k3: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,输出修改后的字典
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | dic = { 'k1' : "v1" , "k2" : "v2" , "k3" :[ 11 , 22 , 33 ]} # a.请循环输出所有的key for i in dic : print (i) for i in dic.keys(): print (i) # b.请循环输出所有的value for i in dic.values(): print (i) c.请循环输出所有的key和value for 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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的一个子类,实现了对字典排序的功能,下面看一下两者数据类型的对比。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | from collections import OrderedDict print( '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) |
输出结果:
1 2 3 4 5 6 7 8 9 | Normal Dictionary: { 'name' : 'v1' , 'age' : 'v2' , 'job' : 'v3' , 'address' : 'v4' } { 'job' : 'v3' , 'address' : 'v4' , 'name' : 'v1' , 'age' : 'v2' } True OrderedDict: OrderedDict([( 'name' , 'v1' ), ( 'age' , 'v2' ), ( 'job' , 'v3' )]) OrderedDict([( 'job' , 'v3' ), ( 'age' , 'v2' ), ( 'name' , 'v1' )]) False |
从结果来看,如果是普通的字典,即使传入的顺序不一样,但是依然是相同的字典;如果是OrderedDict ,传入的顺序不一样,那么得到的字典是不一样的。
集合操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8423273.html
字符串操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8419009.html
列表操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8433116.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步