03.06 Python學習入門(13)—字典

(本號正在連續推出以Python官網文檔為主線的系統學習Python的系列文章或視頻,感興趣的朋友們歡迎搜索關注。在這裡學習Python事半功倍!本文及後續文章如無特別聲明均以Windows平臺作為演示平臺,Python版本為:3.8.1)


在Python中,映射類型用於表示可哈希的值集映射到任意對象集的映射關係,其中可哈希的值稱作鍵,鍵映射到的對象稱為值。映射類型是可變的,也就是可以刪除特定鍵值之間的映射關係,也可以將特定鍵映射到別的對象。目前,在Python中只內置了一種映射類型:字典。除去那些不能哈希的類型的值(例如列表,字典和其他通過值而不是id比較的可變類型的值),其它值幾乎都可用作字典的鍵。同一字典內的鍵是唯一的,不能重複的。用於鍵的數字類型遵循數字比較的一般規則:如果兩個數字鍵比較相等(比如1和1.0),那麼它們被視為同一個鍵。(不過請注意,由於計算機將浮點數存儲為近似值,因此將它們用作字典鍵通常是不明智的。)

字典類型對象的構造

字典對象可以通過將逗號分隔的鍵值對放置到{}內或使用dict()構造。其中dict()有三種形式:

  • dict(**kwarg) 所有實參都是以關鍵字參數的形式傳遞。
  • dict(mapping, **kwarg) 接受第一個為映射類型的參數,其餘(若有)都以關鍵字參數的形式傳遞。
  • dict(iterable, **kwarg) 接受一個可迭代類型的位置參數,此參數的元素必須是鍵值對,其餘(若有)都以關鍵字參數的形式傳遞。

字典對象是按如下構造的:

  1. 如果沒有提供位置參數,則構造空字典對象。
  2. 如果提供的位置參數是映射類型的,則創建包含與該參數所包含的鍵值對相同的字典。
  3. 如果提供的位置參數是可迭代類型的,則構造包含以該參數中每個元素的第一個對象為鍵第二個對象為值的鍵值對的字典,如果鍵重複出現則最後出現的鍵對應的值為此鍵的值。這種情況下要求該參數中的元素本身必須是包含兩個對象的可迭代類型的對象,並且元素的第一個對象必須是可哈希的。如果不滿足此要求會報TypeError。
  4. 如果提供了關鍵字參數,則關鍵字參數表示的鍵值對加入到新創建的字典中,如果鍵已存在則用現在的值更新之前的值。

字典構造示例如下:

Python學習入門(13)—字典

【示例】 字典對象的創建

字典類型支持的操作

  • list(d) 返回由字典d中所有鍵組成的列表。
  • len(d) 返回字典d中鍵值對的個數。
  • d[key] 返回字典d中對應於鍵key的值。如果鍵不存在則報KeyError。如果定義dict的子類時定義了一個方法__missing__(),假設dSub為該子類的對象,且key在給對象中不存在,那麼dSub[key]操作就會調用__missing__(),並將鍵key作為參數。然後該操作返回或引發由調用__missing__ (key)返回或引發的任何內容。子類中不存在其他操作或方法調用__missing__()。如果沒有定義_missing__(),則dSub[key]會引發KeyError。在子類中__missing__()必須定義為一個方法,不能是一個實例變量。[注:子類的概念將在本系列後續文章中詳細介紹]
  • d[key]=value 將字典d中鍵對應的值設為value,如果鍵key存在,則用value更新對應的值,否則插入鍵值對(key,value)。
  • del d[key] 將字典中鍵key對應的鍵值對移除,如果不存在該鍵則報KeyError。
  • key in d 如果在字典中存在key則為True,否則為False。
  • key not in d 如果在字典中不存在key則為True,否則為False。等同於not key in d。
  • iter(d) 返回字典中鍵的一個迭代器。是iter(d.keys())的快捷方式。
  • d.clear() 清除字典中所有鍵值對。
  • d.copy() 返回字典d的一個淺拷貝。
  • dict.fromkeys(iterable[, value]) 用來創建包含以itervale中元素為鍵value為值的鍵值對的字典,如果未指定value則鍵值對的值均為None。此方法是dict的類方法。
  • d.get(key[, default]) 如果字典d包含鍵key,則返回鍵key對應的值,否則返回default,如果沒有給定default則返回None。
  • d.items() 返回字典的鍵值對的一個新視圖。
  • d.keys() 返回字典的鍵的一個新視圖。
  • d.pop(key[, default]) 如果key在字典d中,則從d中移除key對應的鍵值對並返回其對應的值,否則返回default。如果字典d中不存在鍵key並且沒有指定default,則報KeyError。
  • d.popitem() 從字典d中移除並返回一個鍵值對。鍵值對的返回順序為後進先出,即後加入的鍵值對先返回。
  • reversed(d) 返回字典d的鍵的一個逆序迭代器。
  • d.setdefault(key[, default]) 如果鍵key在字典中,則返回其對應的值,否則將鍵值對(key,default)插入到d中並返回default的值。default缺省為None。
  • d.update([other]) 使用other中的鍵值對更新字典,對存在的鍵的值進行覆蓋,鍵不存在時插入鍵值對。返回None。其中other可以是字典對象,也可以是包含鍵值對的可迭代對象,或是關鍵字形式的參數。
  • d.values() 返回字典d中值的一個新視圖。字典的一個值視圖和另一個值視圖的相等性比較總是返回False,包括自己和自己比較。

示例如下:

Python學習入門(13)—字典

【示例】字典支持的操作

字典視圖對象

dict.keys()、dict.values()和dict.items()返回的對象是視圖對象。它們提供了字典項(鍵,值,鍵值對)的動態視圖,這意味著當字典更改時,視圖也將隨著更改。

字典視圖對象支持如下操作:

  • len(dictview) 返回字典視圖dictview中項的個數
  • iter(dictview) 返回字典視圖的一個迭代器。迭代順序按鍵值對插入順序。當字典在插入或刪除鍵值對時對視圖進行迭代會報RuntimeError或不能完整迭代所有項。[注:由於迭代順序是按鍵值對插入順序,因此可使用內置函數zip()來產生鍵值對:pairs=zip(d.keys(),d.values())。另一種產生鍵值對的方法是:pairs = [(k, v) for (k, v) in d.items()]
  • x in dictview 如果x在視圖dictview中則返回True,否則返回False
  • reversed(dictview) 返回字典視圖的一個逆序迭代器,迭代順序按鍵值對插入順序的逆序。

字典視圖對象實例如下:


Python學習入門(13)—字典

【示例】字典視圖支持的操作

[注] 鍵視圖是類似集合的視圖,因為它們項是唯一的並且是可哈希的。當字典中所有鍵對應的值都是可哈希的,則鍵值對就是唯一的,可哈希的,那麼鍵值對視圖也是類似集合的視圖。由於值視圖中的項通常不是唯一的,所以值視圖不能視為與集合類似。對於類似集合的視圖,為抽象基類collections.abc.Set定義的所有操作都是可用的(例如==,

【結束】

Python學習入門(13)—字典


分享到:


相關文章: