4. python Collections -- Defaultdict objects

14人閱讀web

語法:app

    class collections.defaultdict([default_factory[...]])ide

    返回一個新的類字典的對象。函數

    defaultdict是內置的dict類的一個子類。 spa

    它覆蓋一個方法並添加一個可寫實例變量。對象

    其他的功能與dict類相同,此處未記錄。blog

    第一個參數提供了default_factory屬性的初始值; 它默認爲None。get

    全部剩餘的參數都被視爲傳遞給dict構造函數,包括關鍵字參數。it


除標準dict操做外,defaultdict對象還支持如下方法:io

    __missing__(key)

    若是default_factory屬性爲None,則會以key做爲參數引起KeyError異常。

    若是default_factory不是None,則不帶參數調用他以提供給定鍵的默認值,將此值插入到鍵的字典中並返回。

    若是調用default_factory引起異常,則此異常將不變的傳播。

    當找不到請求的鍵時,此方法由dict類的__getitem __()方法調用;而後由__getitem __()返回或引起它返回或引起的任何內容。

    請注意:除__getitem __()以外的任何操做都不會調用__missing __()。 這意味着get()將像普通字典同樣,返回None做爲默認值,而不是使用default_factory。

    

    defaultdict對象支持如下實例變量:

        default_factory

            該屬性由__missing __()方法使用; 它從構造函數的第一個參數(若是存在)初始化,若是不存在則初始化爲None。


defaultdict 舉例

使用list做爲default_factory,能夠很容易地將一系列鍵值對分組到列表字典中:

image.png

    當第一次遇到每一個 key 時,它不在映射中; 因此,使用default_factory函數自動建立一個條目,該函數返回一個空列表。

    而後 list.append( )操做將該值附加到新列表中。 

    當再次遇到key時,查找正常進行(返回該key的列表),而且list.append( )操做會向列表添加另外一個值。 

    這種技術比使用dict.setdefault()的等效技術更簡單,更快捷:(看圖就懂了 - -!)

image.png

    將default_factory設置爲int可以使defaultdict對計數有用(如其餘語言中的bag(包)或multiset(多重集)):

image.png

    當第一次遇到字母時,它在映射中不存在,所以default_factory函數調用int()以提供默認計數爲零。 而後遞增操做爲每一個字母構建計數。

    始終返回零的函數int( )只是常量函數的一個特例。 建立常量函數的更快、更靈活的方法是使用能夠提供任何常量值(不單單是零)的lambda函數:

image.png

    將default_factory設置爲set會使defaultdict對構建集合字典頗有用:

image.png

相關文章
相關標籤/搜索