我的Python自學之路-002 字典的知識
阿新 • • 發佈:2020-09-15
'''
字典是python中唯一的驗證型別,採用鍵值對(key-value)的形式儲存資料。python對key進行雜湊函式運算。
根據計算的結果決定value的儲存地址。所以字典是無序儲存的。且key必須是可雜湊的。可雜湊表示key必須是不
可變型別。如:數字,字串,元組。
字典是除列表以外,python中最靈活的內建資料結構型別,列表是有序的物件結合。字典是無序的物件集合。
兩者的區別在於:字典中的元素是通過鍵來存取的,而不是通過偏移存取。
'''
#不可變型別:整型,字串,元組
#可變型別:列表,字典
#1.字典的建立,字典中的key是不可改變的。因此列表,字典不能做字典中的鍵,只能用整型,字串,元組來做key
dic1 = {'name':'張三','age':27,'sex':'male'} #冒號前面的是key,後面的是value dic2 = {[1,2,3]:"張三",'age':27,'sex':'male'} #列表[1,2,3]不能做key,TypeError: unhashable type: 'list' dic3 = {'name':'張三','age':27,'sex':'male','hobby':{'name':'ceshi','age':45}} #字典可以做字典中的值 dic2 = dict((('name','alex'),)) #一般不適用,太麻煩
#字典的兩大特點:無序,鍵唯一
#2.操作字典
#(1).增加 如果鍵存在,則會改變原來字典中的該鍵對應的值,如果鍵不存在,則新增一個鍵值對
#直接在原字典後面跟一個[],賦給[]中鍵一個值
dic1 = {'name':'Alex'} dic1['age'] = 18 dic1['name']=18 print(dic1) #使用setdefault方法,setdefault方法有返回值。 ret1 = dic1.setdefault('age',34) #如果字典中有這個鍵,則原來的鍵不做任何的變動。返回字典中相應的鍵值。 print(ret1) ret2 = dic1.setdefault('hobby','girl') #如果沒有這個鍵,則則在字典中新增一個鍵值對,並返回相應的值。 print(ret2) print(dic1)
#(2).查 通過鍵查詢。
dic3 = {'name':'張三','age':27,'sex':'male'} print(dic3['name']) #列印一個字典中有哪些鍵 print(dic3.keys()) print(type(dic3.keys())) #將dict_keys型別轉換成list型別 print(list(dic3.keys())) #取出所有的鍵 print(list(dic3.values())) #取出所有的值 print(list(dic3.items())) #取出所有的鍵值對
#(3).改
dic3 = {'name':'張三','age':27,'sex':'male'} dic3['name'] = 'Alex' print(dic3)
dic4 = {'name':'張三','age':27,'sex':'male'} dic5 = {'1':'1111','2':'22222'} dic4.update(dic5) #類似於列表中的extend方法,如果原來的字典中有相應的鍵,則更新原鍵值,如果沒有,則新增新的鍵值對。 print(dic4) print(dic5)
#(4).刪
dic5 = {'name':'Maren','age':27,'sex':'male'} del dic5['name'] #del刪除的是一個鍵值對 print(dic5) dic5 = {'name':'Maren','age':27,'sex':'male'} dic5.clear() #clear 清空整個字典,剩下一個空字典 print(dic5) dic5 = {'name':'Maren','age':27,'sex':'male'} print(dic5.pop('age')) #pop返回被刪除的鍵值對的值 print(dic5) dic5 = {'name':'Maren','age':27,'sex':'male'} a = dic5.popitem() #隨機刪除某組鍵值對,並以元組的方式返回值 print(a,dic5) dic5 = {'name':'Maren','age':27,'sex':'male'} del dic5 #從記憶體中清空了整個字典,執行會報錯。 print(dic5)
#(5).其他操作以及涉及到的方法
#5.1.dict.fromkeys() 基本不用
dic6 = dict.fromkeys(['host1','host2','host3'],'test') #所有鍵都給指定同一個值:test print(dic6) dic6 = dict.fromkeys(['host1','host2','host3'],['test1','test2']) print(dic6) dic6['host2'][1] = 'Alex' print(dic6) #{'host1': ['test1', 'Alex'], 'host2': ['test1', 'Alex'], 'host3': ['test1', 'Alex']}
#5.2 d.copy() 對字典d進行淺複製,返回一個和d有相同鍵值對的新字典,後面重點講解
#5.3 字典的巢狀
#汽車品牌
car = { "美國":{ "別克":["SUV的自動停車功能好","車比較肉"], "凱迪拉克":["車標酷炫","百公里加速性不好"], "道奇":["有皮卡,效能好","在國外賣不動"], "悍馬":["安全效能極高","太貴了"] }, "日本":{ "本田":["油耗低","安全效能差"], "豐田":["提速快","車型不好看"] }, "中國":{ "紅旗":["車型好看","定價高"], "傳祺":["價格適中","質量有問題"] } } #修改別克的質量,車不肉了 car["美國"]["別克"][1] = "車不肉了,做了改進" print(car)
#5.4 字典的排序
# sorted(dict):返回一個有序的包含字典所有key的列表
dic = {5:"444",3:"666",8:"999",4:"222"} print(dic) print(sorted(dic)) print(sorted(dic.keys())) print(sorted(dic.values())) print(sorted(dic.items()))
#5.5 字典的遍歷
#字典的遍歷非常重要,多練習
dic5 = {'name':'Maren','age':27,'sex':'male'} for i in dic5: #預設迴圈遍歷字典的鍵 print(i) print("--------------------------") #如何遍歷字典中的鍵和值 #1.通過鍵值,取值.推薦使用這種方法 for i in dic5: print(i,dic5[i]) print("--------------------------") #2.遍歷字典的items for i in dic5.items(): print(i) print("--------------------------") #3.通過列舉取值 for i,v in dic5.items(): print(i,v)