字典是一種通過名字或者關鍵字引用的得數據結構,key類型需要時被哈希,其鍵可以是數字、字符串、元組,這種結構類型也稱之為映射。字典類型是Python中唯一內建的映射類型。
注意,浮點數比較很不精確,因此千萬不要用浮點數作為key!
一、字典的鍵不能是list類型:
list=[1,2,3,4]
info2={list:'number'}
結果:
Traceback(mostrecentcalllast):
File"D:/字典.py",line2,in
info2={list:'number'}
TypeError:unhashabletype:'list'
二、list/set/dict均不可被哈希,int、float、str、tuple:是可以哈希的
1list.__hash__;
#結果為None
2set.__hash__;
#結果為None
3dict.__hash__;
#結果為None
4print(int.__hash__);
#
5print(float.__hash__);
#
6print(str.__hash__);
#
7print(tuple.__hash__);
#
三、增
info={'name':'jamnes','age':'32','work':'basketplayer'}
info['sex']='fale'
print(info)
結果:
{'name':'jamnes','age':'32','work':'basketplayer','sex':'fale'}
四、刪
4-1pop():刪除指定key的鍵值對
nfo={'name':'jamnes','age':'32','work':'basketplayer'}
info.pop('work')
print(info)
結果:
{'name':'jamnes','age':'32'}
4-2clear():清除所有的鍵值對
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
五、改
info={'name':'jamnes','age':'32','work':'basketplayer'}
info['age']='33'
print(info)
結果:
{'name':'jamnes','age':'33','work':'basketplayer'}
六、查
6-1get():通過給定的key,查找對應的value,如果給定的可以在字典中無,則返回None
info={'name':'jamnes','age':'32','work':'basketplayer'}
a=info.get('age')
print(a)
結果:
32
6-2setdefault():通過給定的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-1update()=
一,更新里面有的信息,就是改變
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':'3champions'}
info.update(info2)
print(info)
結果:
{'name':'jamnes','age':'32','work':'basketplayer','honor':'3champions'}
八、返回鍵,值,鍵值對
keys():以列表(list)返回字典中的所有鍵(key),字典是無序的,所以這個list返回的不是定義字典的順序
values():以列表(list)返回字典中的所有值,這個list的順序跟keys()返回的list順序是一一對應的
items():以列表(list)返回可遍歷的(鍵,值)元組數組,這個tuple的list包含了dictionary的所有數據
dict={'k1':'v1','k2':'v2','k3':'v3'}
#1,請循環遍歷除所有的key
forkeysindict.keys():
print(keys)
#遍歷出所有的value
forvalueindict.values():
print(value)
#遍歷出
forkey,valueindict.items():
print(key+':'+value)
#結果:
k1
k2
k3
v1
v2
v3
k1:v1
k2:v2
k3:v3
九、練習字典
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.請循環輸出所有的key
foriindic:
print(i)
foriindic.keys():
print(i)
#b.請循環輸出所有的value
foriindic.values():
print(i)
c.請循環輸出所有的key和value
fori,jindic.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)
十、根據字典的鍵值進行排序
反序:reverse=True
mylist=['學習','工作','玩耍','學習','工作','工作']
print(mylist)
#list_element是另外一個列表,里面的內容是list_element里面的無重復項
myset=set(mylist)
mydict={}
foriteminmyset:
res=mylist.count(item)
sample={item:res}
#print(res)
#print("the%dhasfound%d"%(item,mylist.count(item)))
mydict.update(sample)
print(mydict)
print(sorted(mydict.items(),key=lambdamydict:mydict[1],reverse=True))
十一、OrderedDict的使用
在Python中,dict這個數據結構由于hash的特性,是無序的,這在有時候會給我們帶來一些麻煩,幸運的時,在collections模塊中為我們提供了OrderedDict,當你需要獲取一個有序的字典對象時,試用它即可。
python中的字典(dict)對象可使用“鍵”,“值”對的形式存取值,但默認的內置類型字典中的元素是無序的。Collections模塊下的OrderedDict類實現了對字典的排序,OrderedDict是dict的一個子類,實現了對字典排序的功能,下面看一下兩者數據類型的對比。
fromcollectionsimportOrderedDict
print('NormalDictionary:')
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)
輸出結果:
NormalDictionary:
{'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,傳入的順序不一樣,那么得到的字典是不一樣的。
以上內容為大家介紹了python字典操作方法詳解,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。