(三)字典和集合

2021-09-25 11:16:04 字數 2432 閱讀 7873

一、泛對映型別

1、標準庫里的對映型別都是dict來實現的,它們有個共同的限制,只有可雜湊的資料才能作為對映裡的鍵;

2、如果乙個物件是可雜湊的,那麼在這個物件的生命週期中,它的雜湊值是不變的。並且這個物件需要實現__hash__方法,

包含__qe__方法。原子不可變資料型別(str,bytes和數值型別)都是可雜湊的,frozenset也是可雜湊的。當乙個元組所包含的所

有元素都是可雜湊的,它才是雜湊的。

3、一般使用者自定義的型別都是可雜湊的,雜湊值是其id值,

4、建立字典的方式

二、字典推導

三、常見的對映方法

1、用setdefault處理找不到的鍵

當d[k]查詢不到正確的鍵時,會丟擲異常,可以用d.get(key,default)來替代d[k]。如下為統計某元素出現的位置。

用setdefault簡化**,只需要查詢一次,上面至少需要2次(不存在時需要3次)

三、對映的彈性鍵查詢

1、 當找不到鍵時,另乙個選擇是defaultdict,返回某種預設值。如下返回空列表。

注:這種方法只會在__getitem__呼叫時發揮作用,即dd[k]時有效,使用dd.get(k)則會返回none。

2、特殊方法__missing__

在對映型別中,在__getitem__找不到鍵的時候,會自動呼叫__missing__方法。其中2中的isinstance是必需的,當鍵不存在時,防止遞迴呼叫;__contains__方法也是必需的,當呼叫k in d時會呼叫它,

但並沒有用k in dict來判斷鍵的存在,因為也會導致__contains__被遞迴呼叫,因此採用的是顯式的呼叫self.keys();在python3中,dict.keys()返回的是檢視,查詢元素速度快。在python2中返回的是列表,當

物件體積較大時,效率不高,因為需要掃瞄整個列表。

四、字典的變種

除了defaultdict的其他對映

orderdict:新增鍵的時候會保持順序。

chainmap: 容納數個不同的對映物件。

counter: 計數

五、子類化userdict

自定義對映時,以userdict為基類,比以dict為基類更方便。userdictr 的data屬性,是dict的例項。

六、不可變對映型別

七、集合論

1、 set或frozenset。set型別本身是不可雜湊的,但是frozenset可以,因此可以建立乙個包含不同frozenset的set。

使用set的某些操作可以提高速度

2、集合的建立

(1)集合字面量,。空集合set()({}為空字典)。

(2)字面量句法相比於set([1,2,3])更快。

(3)集合推導

跟列表推導類似,不過將方括號換成了{}

七、dict和set背後

1、查詢時,dict和set的速度要快於列表;

2、字典中的雜湊表。雜湊表是稀疏陣列(總有空白元素),導致字典會占用較大空間。當存放數量巨大的記錄時,放在元組或具名元組構成的列表中會是較好的選擇。

3、鍵查詢很快

4、鍵的次序取決於新增順序

5、往字典裡新增新鍵,可能會改變已有鍵的順序:當新增新鍵時,可能會為字典擴容,需要新建乙個更大的雜湊表,這個過程可能會出現衝突。

6、由5知,不要同時對字典時行掃瞄和修改,最好分成兩步:掃瞄字典,放到乙個新字典裡;修改原字典。

7、上述特點對集合同樣適用。

(三)字典和集合

一 泛對映型別 1 標準庫里的對映型別都是dict來實現的,它們有個共同的限制,只有可雜湊的資料才能作為對映裡的鍵 2 如果乙個物件是可雜湊的,那麼在這個物件的生命週期中,它的雜湊值是不變的。並且這個物件需要實現 hash 方法,包含 qe 方法。原子不可變資料型別 str,bytes和數值型別 都...

python基礎(三)字典

1.字典的用途 字典的名稱指出了這種資料結構的用途。普通圖書適合按從頭到尾的順序閱讀,如果你願意,可快速翻到任何一頁,這有點像python中的列表。字典 日常生活中的字典和python字典 旨在讓你能夠輕鬆地找到特定的單詞 鍵 以獲悉其定義 值 在很多情況下,使用字典都比使用列表更合適。下面是pyt...

Python基礎 三 字典

字典的格式my dict 定義乙個字典 my dict1 定義乙個空字典 my dict2 dict 定義乙個空字典1.新增元素my dict my dict gender male 此時為新增,將新增到my dict字典中2.修改元素my dict my dict age 121 此時為修改,將 ...