1. 程式人生 > 實用技巧 >我的Python自學之路-002 字典的知識

我的Python自學之路-002 字典的知識

'''
字典是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)