日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

铁乐学Python_day05-字典dict

發布時間:2024/3/13 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 铁乐学Python_day05-字典dict 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、【字典dict】

Python內置了字典:dict的支持,dict全稱dictionary,
在其他語言中也稱為map,使用鍵-值(key-value)存儲,具有極快的查找速度。

字典和列表直觀上不同的是,字典用的是方括弧’{}’括起來,列表用的是方括號’[]’。

例,假設要根據hero3人族兵種的級別查找對應的兵種,如果用list實現,需要兩個list:
Lv = [‘Lv1’, ‘Lv2’, ‘lv3’]
hum_soldier = [‘槍兵’, ‘射手’, ‘獅鷲’]

給定一個級別,要查找對應的hum_soldier,就先要在Lv中找到對應的位置,
再從hum_soldier取出對應的兵種,list越長,耗時越長。
如果用dict實現,只需要一個“Lv”-“hum_soldier”的對照表,直接根據級別查找兵種,
無論這個表有多大,查找速度都不會變慢。(但是會占的內存比LIST多)

字典這種采用鍵值對的方式(key-value),儲存大量關系性的數據,查詢速度快。

字典的值:任意數據類型。只有值能對應上所有類型,它的鍵只可以對應上不可變類型的數據。
字典的鍵:屬于不可變數據類型。且不能重復,唯一。
所以鍵可以是int,bool,str,tuple,但不能是列表。
如果你建立兩個相同的鍵,后賦值那個會覆蓋前面那個同名的鍵。

字典的順序:
3.5之前,字典是無序的。
3.6開始,有優化,字典創建的時候,按照一定的順序插入的數值,看起來變得更有序。

數據類型分類:
可變(不可哈希):list,dict,set(集合)—unhashable type
不可變(可哈希):int,bool,str,tuple —hashable type
對于不變對象來說,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會創建新的對象并返回,這樣,就保證了不可變對象本身永遠是不可變的。
(對原值沒有發生改變,只是形成一個新的)

按容器(可承載各種數據類型)類型分:
容器類:list,tuple,dict

list列表,查詢速度從頭遍歷到尾
disc字典,二分查找(有一個哈希表,每一個鍵[唯一]對應一個哈希值。

# hash hum_soldier = {'lv1':'槍兵', 'lv2':'射手', 'lv3':'獅鷲'} print(hash('lv1')) # 可查看鍵對應的哈希值得出hash值: 1863379157542317326

2、對字典的操作;

【增】加鍵值的方法學習兩種:

第一種:直接通過鍵修改值;

有則覆蓋(改),無則添加。和列表的索引增加類似。

hum_soldier = {'lv1':'槍兵', 'lv2':'射手', 'lv3':'獅鷲'} hum_soldier['lv4'] = '劍士' print(hum_soldier)可以看到無則添加成: {'lv4': '劍士', 'lv2': '射手', 'lv1': '槍兵', 'lv3': '獅鷲'}有則覆蓋的例子,上面中lv1的鍵值對己有,我現在直接覆蓋修改成兵種變成農民: hum_soldier['lv1'] = '農民' print(hum_soldier)效果:{'lv2': '射手', 'lv4': '劍士', 'lv3': '獅鷲', 'lv1': '農民'}

所以如果不確定數據有沒有,及數據不可以覆蓋的情況下,建議用到接下來要說的第二種:

第二種:setdeafult(),無則添加,有則不變。對數據的保護更高,更嚴謹。

如果 key 在 字典中,返回對應的值。
如果不在字典中,則插入 key 及設置的默認值 default,并返回 default ,default 默認值為 None。

比如同樣接上文的例子,使用setdeafult()方法添加一組原來沒有的鍵值對:

hum_soldier.setdefault('lv5', '僧侶') print(hum_soldier)輸出可看到有添加: {'lv1': '農民', 'lv2': '射手', 'lv5': '僧侶', 'lv3': '獅鷲', 'lv4': '劍士'}再添加原來便有的lv2鍵嘗試: hum_soldier.setdefault('lv2', '神射手') print(hum_soldier)輸出看到沒有變化,lv2鍵對應的值依然是射手: {'lv3': '獅鷲', 'lv2': '射手', 'lv5': '僧侶', 'lv4': '劍士', 'lv1': '農民'}注意:同樣由于setdefault()的這個特性,最好只在數據沒有添加也不影響或有檢查反饋的場合下用。hum_soldier.setdefault('lv6') 也可以單純只加一個鍵,默認鍵值為NoneNone也是常常會預留的。 很多時候我們新建的一個字典,就是先建好鍵,值都是默認None,后面再或獲取或填入的。 {'lv3': '獅鷲', 'lv1': '農民', 'lv4': '劍士', 'lv2': '射手', 'lv6': None, 'lv5': '僧侶'}

利用setdeafult()的返回值特性,我們還可以嘗試進行這樣的操作:

hum_soldier = {'lv1': '農民', 'lv2': '射手', 'lv6': None, 'lv3': '獅鷲', 'lv5': '僧侶', 'lv4': '劍士'}print('人類的一級兵種是:%s' % hum_soldier.setdefault('lv1', None)) print('人族的七級兵種是:%s' % hum_soldier.setdefault('lv7', None)) print(hum_soldier)顯示: 人類的一級兵種是:農民 人族的七級兵種是:None {'lv1': '農民', 'lv6': None, 'lv5': '僧侶', 'lv3': '獅鷲', 'lv2': '射手', 'lv7': None, 'lv4': '劍士'}

【刪除】的方法我們來學習四種:

1)【pop(key[,default)】

字典 pop() 方法刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。
key值必須給出。 否則,返回default值。

例:

hum_soldier = {'lv1': '農民', 'lv2': '射手', 'lv6': None, 'lv3': '獅鷲', 'lv5': '僧侶', 'lv4': '劍士'} print(hum_soldier.pop('lv1')) print(hum_soldier)顯示: 農民 {'lv6': None, 'lv4': '劍士', 'lv7': None, 'lv5': '僧侶', 'lv3': '獅鷲', 'lv2': '射手'}hum_soldier.pop('lv8') #刪除的時候沒有此鍵的時候會報錯 報錯 Traceback (most recent call last):File "E:/Python/day05/dict.py", line 26, in <module>print(hum_soldier.pop('lv8')) KeyError: 'lv8'hum_soldier.pop('lv9', None) #建議以這種寫法,不報錯而是返回你設定的值,一般是None來提醒自已沒有此鍵。 返回 None
2)【popitem(key[,default)】

字典 popitem() 方法隨機返回并刪除字典中的一對鍵和值(一般刪除末尾對)。
如果字典已經為空,卻調用了此方法,就報出KeyError異常。

3)【clear()】清空字典所有元素,變空字典

例:

hum_soldier = {'lv1': '農民', 'lv2': '射手', 'lv3': '獅鷲', 'lv5': '僧侶', 'lv4': '劍士'} print("人族兵種-字典長度為:%s" % len(hum_soldier)) hum_soldier.clear() print("人族兵種-字典長度現為:%s" % len(hum_soldier))返回結果: 人族兵種-字典長度為:5 人族兵種-字典長度現為:0
4)【del】不詳述,前面已有練習刪除列表等。

del dict 刪除字典
del dict[’key’] 刪除對應鍵值,沒有時會報異常,所以建議一般使用pop來刪除。

【改】的方法我們來學習兩種:

第一種:直接通過鍵來修改(賦值)
hum_soldier = {'lv5': '僧侶', 'lv1': '農民', 'lv3': '獅鷲', 'lv2': '射手', 'lv4': '劍士'} hum_soldier['lv1'] = '戟兵' print(hum_soldier)顯示: {'lv5': '僧侶', 'lv1': '戟兵', 'lv3': '獅鷲', 'lv2': '射手', 'lv4': '劍士'}
第二種:update()方法

dict.update(dict2)
將dict2鍵/值對,更新(覆蓋并添加)到dict
(會覆蓋,有相同會覆蓋,沒有的添加,和同步更新有點像)

hum_soldier = {'lv1':'槍兵', 'lv2':'射手', 'lv3':'獅鷲'} hum = {'lv4':'劍士', 'lv5':'僧侶', 'lv1':'農民'} hum_soldier.update(hum) print(hum_soldier) print(hum)顯示:(結果是hum_soldier字典中的槍兵被覆蓋,再增加了劍士和僧侶,而hum字典保持不變。) {'lv5': '僧侶', 'lv4': '劍士', 'lv2': '射手', 'lv1': '農民', 'lv3': '獅鷲'} {'lv4': '劍士', 'lv5': '僧侶', 'lv1': '農民'}

【查】的方法我們來學習三種

1)dict[‘key’]只能通過鍵查值,查不到的報錯
2)通過in也可以判斷key是否存在:

Python 字典 in 操作符用于判斷鍵是否存在于字典中,如果鍵在字典dict里返回true,否則返回false。
語法
in 操作符語法:
key in dict
參數
key – 要在字典中查找的鍵。
返回值
如果鍵在字典里返回true,否則返回false。

hum = {'lv4':'劍士', 'lv5':'僧侶', 'lv1':'農民'} print('lv2' in hum) print('lv4' in hum)顯示: False True

注意是鍵-key,而不要弄成了判斷值了。

3)dict.get(‘key’)通過鍵得到對應的值,找不到鍵的默認返回None。

語法
get()方法語法:
dict.get(key, default=None)
參數
key – 字典中要查找的鍵。
default – 如果指定鍵的值不存在時,返回該默認值值。
返回值
返回指定鍵的值,如果值不在字典中返回默認值 None。

例:

hum = {'lv4':'劍士', 'lv5':'僧侶', 'lv1':'農民'} print('人族4級兵種為:%s' % hum.get('lv4'))顯示: 人族4級兵種為:劍士

3、【其它方法】

dict.keys()

字典keys() 方法以列表返回一個字典所有的鍵。

把所有的鍵(不包括值)放到一個容器中,
本身沒什么用,類似于列表(但沒有索引),可以用于for循環迭代打印輸出所有鍵等。
dict.keys() 循環打印出所有鍵時,等同直接dict;

(另外可用list轉換成列表:list(dic.keys()))
特殊類型轉換 dict 轉化成 list,類似:

hum = {'lv4':'劍士', 'lv5':'僧侶', 'lv1':'農民'} print(hum.keys()) hum_list = list(hum.keys()) print(hum_list)顯示結果: dict_keys(['lv4', 'lv5', 'lv1']) ['lv4', 'lv5', 'lv1']

dict.values()

字典 values() 方法以列表返回字典中的所有值。

與keys相對,這次是把所有值放到一個列表中。與keys()用法可觸類旁通,不再詳述。

dict.items()

字典 items() 方法以列表返回可遍歷的(鍵, 值) 元組數組。

這個就厲害了,返回的是成對的鍵/值,而且是遍歷。

例:

hum = {'lv4':'劍士', 'lv5':'僧侶', 'lv1':'農民'} print(hum.items())顯示結果: dict_items([('lv4', '劍士'), ('lv5', '僧侶'), ('lv1', '農民')])

字典 fromkeys()方法

fromkeys()方法從序列鍵和值設置為value來創建一個新的字典。
dict.fromkeys(seq[, value]))

參數
seq – 這是將用于字典的鍵準備的值的列表。一般為可迭代的對像。
value – 這是可選的,如果提供的話則值將被設置為這個值。

例:

dic ={} lv1_soldier = ['骷髏', '槍兵', '小鬼', '大耳怪', '半人馬', '小精靈', '妖精'] dic = dic.fromkeys(lv1_soldier, 'lv1') print(dic){'小鬼': 'lv1', '小精靈': 'lv1', '槍兵': 'lv1', '妖精': 'lv1', '半人馬': 'lv1', '骷髏': 'lv1', '大耳怪': 'lv1'}

【分別賦值】

a,b = 2,3
a,b = (2,3)
a,b = [2,3] #前提,數量一一對應得上
輸出的結果都是a=2 b=3

a = 4 , b = 5 只用一行代碼賦值a和b的值互換?(面試題)
a,b = b,a

擴展,因為鍵和值也是成對的,所以很多情況下也可以用到分別(雙雙)賦值的這個技巧。
還可以加上for循環遍歷技巧。

for k,v in dict.items()
這里的循環對應的k和v就是取字典里的鍵/值對。

【字典 dict.zip() 迭代分別賦值給鍵和值。】

兩個列表合并成字典

例:

hum_soldier = ['槍兵', '射手', '獅鷲', '劍士', '僧侶', '騎士', '天使'] lv = ['lv' + str(i) for i in range(1,8)] #列表推導式直接做出lv1到lv7 print(lv) dic = dict(zip(lv, hum_soldier)) #分別對應列表順序賦值給字典 print(dic)['lv1', 'lv2', 'lv3', 'lv4', 'lv5', 'lv6', 'lv7'] {'lv2': '射手', 'lv1': '槍兵', 'lv5': '僧侶', 'lv4': '劍士', 'lv7': '天使', 'lv3': '獅鷲', 'lv6': '騎士'}使用zip函數還可以很方便反轉鍵值(原本的值當鍵,原本的鍵變成值) 例如接上例繼續操作反轉:dic = dict(zip(dic.values(), dic.keys())) print(dic) {'獅鷲': 'lv3', '射手': 'lv2', '槍兵': 'lv1', '僧侶': 'lv5', '騎士': 'lv6', '劍士': 'lv4', '天使': 'lv7'}

4、【字典的嵌套】

字典通過鍵找值,列表通過索引找值;
例:

dic = {"name_list":['張三','lisi','隔壁王叔叔'],'dic2':{'name':'太白','age':12},}#1 ,給列表追加一個元素:'旺旺' dic['name_list'].append('旺旺') print(dic)#,2,給列表lisi全部大寫 print(dic['name_list'][1]) #在不知道自已找的位置對不對的時候可以print調試看一下 # dic['name_list'][1] = 'LIST' #最low的時候可以直接賦值 dic['name_list'][1] = dic['name_list'][1].upper() #print(dic)#3,給dic2 對應的字典添加一個鍵值對:hobby:girl. dic['dic2']['hobby'] ='girl' print(dic)

文:鐵樂與貓
2018-3-22
end

總結

以上是生活随笔為你收集整理的铁乐学Python_day05-字典dict的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。