python 字典操作方法详解
字典是一種通過名字或者關(guān)鍵字引用的得數(shù)據(jù)結(jié)構(gòu),key 類型需要時(shí)被哈希,其鍵可以是數(shù)字、字符串、元組,這種結(jié)構(gòu)類型也稱之為映射。字典類型是Python中唯一內(nèi)建的映射類型。
注意,浮點(diǎn)數(shù)比較很不精確,因此千萬不要用浮點(diǎn)數(shù)作為key!
python字典包含了11個(gè)內(nèi)置方法,具體如下:
| 序號 | 函數(shù) | 描述 |
| 1 | clear(self) | 刪除字典內(nèi)所有的元素 |
| 2 | copy(self) | 返回一個(gè)字典的淺copy,俗稱賦值 |
| 3 | fromkeys(*args,**kwargs) | 創(chuàng)建一個(gè)新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應(yīng)的初始值 |
| 4 | get(self,k,d=None) | 返回指定鍵的值,如果值不在字典中返回default值 |
| 5 | items(self) | 以列表返回可遍歷的(鍵, 值) 元組數(shù)組 |
| 6 | keys(self) | 以列表返回一個(gè)字典所有的鍵 |
| 7 | pop(self,k,d=None) | 刪除字典給定鍵 key 所對應(yīng)的值,返回值為被刪除的值。key值必須給出。 否則,返回default值 |
| 8 | popitem(self) | 隨機(jī)返回并刪除字典中的一對鍵和值 |
| 9 | setdefault(self,k,d=None) | 和get()類似, 但如果鍵不存在于字典中,將會添加鍵并將值設(shè)為default |
| 10 | update(self,E=None,**F) | 把self的東西更新到外面字典 |
| 11 | values(self) | 以列表返回字典中的所有值 |
具體舉例子解釋如下:
1,字典的鍵不能是list類型:
list = [1,2,3,4]
info2 = {list:'number'}
結(jié)果:
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__;
#結(jié)果為None
2 set.__hash__;
#結(jié)果為None
3 dict.__hash__;
#結(jié)果為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,增
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info['sex'] = 'fale'
print(info)
結(jié)果:
{'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)
結(jié)果:
{'name': 'jamnes', 'age': '32'}
4-2 clear():清除所有的鍵值對
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info.clear()
print(info)
結(jié)果:
{}
4-3setdefault():刪除指定的元素,如果沒有,則返回none
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info.setdefault('son')
print(info)
結(jié)果:
None
5,改
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info['age']='33'
print(info)
結(jié)果:
{'name': 'jamnes', 'age': '33', 'work': 'basketplayer'}
6,查
6-1 get():通過給定的key,查找對應(yīng)的value,如果給定的可以在字典中無,則返回None
info ={'name':'jamnes','age':'32','work':'basketplayer'}
a =info.get('age')
print(a)
結(jié)果:
32
6-2 setdefault():通過給定的key,查找對應(yīng)的value,如果給定的可以在字典中無,則返回None,
同時(shí)在字典中增加'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)
結(jié)果:
32
{'name': 'jamnes', 'age': '32', 'work': 'basketplayer'}
None
{'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'sex': None}
7,更新
7-1update()=
一,更新里面有的信息,就是改變
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info2 = {'name':'wade','age':'33','work':'basketplayer'}
info.update(info2)
print(info)
結(jié)果:
{'name':'wade','age':'33','work':'basketplayer'}
二,更新里面沒有的信息,就是添加
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info2 = {'honor':'3 champions'}
info.update(info2)
print(info)
結(jié)果:
{'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'honor': '3 champions'}
8,返回鍵,值,鍵值對
keys():以列表(list)返回字典中的所有鍵(key),字典是無序的,所以這個(gè)list返回的不是定義字典的順序
values():以列表(list)返回字典中的所有值,這個(gè)list的順序跟keys()返回的list順序是一一對應(yīng)的
items():以列表(list)返回可遍歷的(鍵, 值) 元組數(shù)組,這個(gè)tuple的list包含了dictionary的所有數(shù)據(jù)
dict ={'k1':'v1','k2':'v2','k3':'v3'}
#1,請循環(huán)遍歷除所有的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)
#結(jié)果:
k1
k2
k3
v1
v2
v3
k1:v1
k2:v2
k3:v3
9,練習(xí)字典
dic={'k1':"v1","k2":"v2","k3":[11,22,33]}
a.請循環(huán)輸出所有的key
b.請循環(huán)輸出所有的value
c.請循環(huán)輸出所有的key和value
d.請?jiān)谧值渲刑砑右粋€(gè)鍵值對,"k4":"v4",輸出添加后的字典
e.請?jiān)谛薷淖值渲?ldquo;k1”對應(yīng)的值為“alex”,輸出修改后的字典
f.請?jiān)趉3對應(yīng)的值中追加一個(gè)元素44,輸出修改后的字典
g.請?jiān)趉3對應(yīng)的值的第1個(gè)位置插入個(gè)元素18,輸出修改后的字典
dic={'k1':"v1","k2":"v2","k3":[11,22,33]}
# a.請循環(huán)輸出所有的key
for i in dic :
print(i)
for i in dic.keys():
print(i)
# b.請循環(huán)輸出所有的value
for i in dic.values():
print(i)
c.請循環(huán)輸出所有的key和value
for i,j in dic.items():
print(i,j)
# d.請?jiān)谧值渲刑砑右粋€(gè)鍵值對,"k4":"v4",輸出添加后的字典
dic2 = {'k4':'v4'}
dic.update(dic2)
print(dic)
dic['k4'] = 'v4'
print(dic)
# e.請?jiān)谛薷淖值渲?ldquo;k1”對應(yīng)的值為“alex”,輸出修改后的字典
dic['k1'] ='alex'
print(dic)
f.請?jiān)趉3對應(yīng)的值中追加一個(gè)元素44,輸出修改后的字典
dic['k3'].append(44)
print(dic)
# g.請?jiān)趉3對應(yīng)的值的第1個(gè)位置插入個(gè)元素18,輸出修改后的字典
dic['k3'].insert(0,18)
print(dic)
10,根據(jù)字典的鍵值進(jìn)行排序
反序: reverse = True
mylist = ['學(xué)習(xí)', '工作', '玩耍', '學(xué)習(xí)', '工作', '工作']
print(mylist)
# list_element 是另外一個(gè)列表,里面的內(nèi)容是list_element里面的無重復(fù)項(xiàng)
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這個(gè)數(shù)據(jù)結(jié)構(gòu)由于hash的特性,是無序的,這在有時(shí)候會給我們帶來一些麻煩,幸運(yùn)的時(shí),在collections模塊中為我們提供了 OrderedDict ,當(dāng)你需要獲取一個(gè)有序的字典對象時(shí),試用它即可。
python中的字典(dict)對象可使用“鍵”,“值” 對的形式存取值,但默認(rèn)的內(nèi)置類型字典中的元素是無序的。Collections模塊下的OrderedDict類實(shí)現(xiàn)了對字典的排序,OrderedDict是dict的一個(gè)子類,實(shí)現(xiàn)了對字典排序的功能,下面看一下兩者數(shù)據(jù)類型的對比。
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)
輸出結(jié)果:
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
從結(jié)果來看,如果是普通的字典,即使傳入的順序不一樣,但是依然是相同的字典;如果是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
總結(jié)
以上是生活随笔為你收集整理的python 字典操作方法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [js常用]将秒转化为时分秒
- 下一篇: 什么是EIP?