字典使用小結(jié) 字典對(duì)象是可變的,,它是一個(gè)容器類型,能存儲(chǔ)任意個(gè)數(shù)的Python對(duì)象,,其中也可包括其他容器類型,。字典的每個(gè)鍵值(key=>value)對(duì)用冒號(hào)(:)分割,每個(gè)鍵值對(duì)之間用逗號(hào)(,)分割,,整個(gè)字典包括在花括號(hào)({ })中,。 1.創(chuàng)建字典對(duì)象 ① 直接定義字典對(duì)象 dict_a={}或dict1={1:’a’,2:’b’,3:’c’,4:’d’} Dict_b={1:’a’,2:’b’,3:’c’,4:’d’} ② dict方法創(chuàng)建字典 dict_a=dict(name=’fff’,age=40) (使用關(guān)鍵字參數(shù)) ③ zip方法將列表轉(zhuǎn)換為字典對(duì)象 lst=['a','b','c','d'] lst1=[1,2,3,4] d=dict(zip(lst1,lst)) ④ fromkeys()方法創(chuàng)建字典對(duì)象,字典的value若不給定默認(rèn)為None dict_a={}.fromkeys((‘x’,’y’),1) dict_b={}.fromkeys((‘a(chǎn)’,’b’)) 鍵必須不可變,,所以可以用數(shù)字,字符串或元組充當(dāng),,所以用列表就不行,,如下實(shí)例: >>>dict1={[1]:’a’,2,’c’} ‘鍵,不能為列表等不可變對(duì)象 File “ dict1={[1]:’a’,2,’c’} ^ SyntaxError: invalid syntax 字典對(duì)象的值可以是可變對(duì)象,,如下例 dict_a={‘a(chǎn)’:[1,2,3]} #字典值為列表 dict_b={‘a(chǎn)’:{‘A’:’B’}} #字典值為字典 print(“dictakey a的值的第2個(gè)元素為{}”.format(dict_a['a'][1])) #第2個(gè)元素的值 print(“dictbkey a的值的第1個(gè)元素為{}”.format(dict_b['a']['A'])) #第1個(gè)元素的值 2.訪問字典對(duì)象 dict[key] 形式返回鍵key對(duì)應(yīng)的值value 遍歷字典對(duì)象 for k,v in d.items(): #取鍵值對(duì) print(k,v) for k in d.values(): #取values值 print(k) for item in d: #取key值 print (item) for item in d: #取values值 print(d[item]) 如果key不在字典中會(huì)引發(fā)一個(gè)KeyError,就會(huì)發(fā)生異常,風(fēng)險(xiǎn)很大.(良好的代碼,,一定是要考慮健壯性,切記) >>>d {‘a(chǎn)’: 55, ‘dd’: 4, ‘AA’: 32, ‘Ca’: 54, ‘we’: 90} >>>d['k'] Traceback (most recent call last): File “ KeyError: ‘k’ 解決方法:get方法 >>> print(d.get(‘k’)) #鍵值不存在時(shí)返回None None >>> print(d.get(‘k’,None)) #鍵值不存在時(shí)指定返回None None 盡量用dict.get()來代替dict[key] 3.檢查key是否在字典中 in ,、not in 用于判斷是否存在字典中 形如:key in dict 有–>True,無–>False if ‘a(chǎn)’ in dict5: print (True) 4. 更新字典 添加一個(gè)數(shù)據(jù)項(xiàng)(新元素)或鍵值對(duì),,dict[new_key] = value 形式添加一個(gè)項(xiàng) 更新一個(gè)數(shù)據(jù)項(xiàng)(元素)或鍵值對(duì),,dict[old_key] = new_value 5.刪除一個(gè)數(shù)據(jù)項(xiàng)(元素)或鍵值對(duì) del dict5[key] 刪除鍵key的項(xiàng) del dict5 刪除整個(gè)字典 dict5.pop(key) 刪除鍵key的項(xiàng)并返回key對(duì)應(yīng)的 value值 6.字典排序 字典排序可以使用sorted()函數(shù),其函數(shù)原型如下 sorted(iterable,key,reverse),,iterable 可以是dict.items(),dict.keys()等,,key是一個(gè)函數(shù),用來選取參與比較的元素,,reverse(reverse=True降序,,默認(rèn)升序)指定排序是倒序或順序。 d={‘a(chǎn)bc’:25,’abd’:12,’bc’:30,’a’:35} print(sorted(d)) #按鍵排序,,輸出鍵的排序后結(jié)果 print(sorted(d.keys())) #按鍵排序 print(sorted(d.items())) #輸出排序后鍵值對(duì) Print(sorted(d.items(),key=lambda x:x[1]) #表示按照values排序 d.items()實(shí)際上是將d轉(zhuǎn)換為可迭代對(duì)象,,迭代對(duì)象的元素為(‘a(chǎn)bc’,25)、(‘a(chǎn)bd’,12),、(‘bc’,30),、(‘a(chǎn)’,35),items()方法將字典的元素轉(zhuǎn)化為了元組,,而這里key參數(shù)對(duì)應(yīng)的lambda表達(dá)式的意思則是選取元組中的第二個(gè)元素作為比較參數(shù)(如果寫作key=lambda item:item[0]的話則是選取第一個(gè)元素作為比較對(duì)象,,也就是key值作為比較對(duì)象。lambda x:y中x表示參數(shù),,y表示lambda函數(shù)的返回值),,所以采用這種方法可以對(duì)字典的value進(jìn)行排序。注意排序后的返回值是一個(gè)list,,而原字典中的鍵值對(duì)被轉(zhuǎn)換為了list中的元組,。 上述代碼結(jié)果: ['a', 'abc', 'abd', 'bc'] ['a', 'abc', 'abd', 'bc'] [('a', 35), ('abc', 25), ('abd', 12), ('bc', 30)] [('abd', 12), ('abc', 25), ('bc', 30), ('a', 35)] 以下表達(dá)式是對(duì)字典d排序,排序的規(guī)則是傳入?yún)?shù)x,,依據(jù)字典d[x]值,,即字典值升序。 for w in sorted(d,key=lambda x:d[x]): #取得字典key的排序結(jié)果 print(‘{}–{}’.format(w,d[w]) sorted(d,key=lambda x:d[x]) 這里是對(duì)字典d的鍵排序結(jié)果,,與d.items()不同,。 如何實(shí)現(xiàn)字典先按鍵排序,相同的按key排序 從上述介紹可知d.items()實(shí)際上是將d轉(zhuǎn)換為可迭代對(duì)象,,其中d[0],,d[1]分別表示字典中的鍵和值,因?yàn)榭梢韵劝磀[1],d[0]排序,,代碼如下: dictdis=sorted(dictsour.items(),key=lambda f:(f[1] ,f[0]),reverse=True) |
|