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,能夠很容易地將一系列鍵值對分組到列表字典中:
當第一次遇到每一個 key 時,它不在映射中; 因此,使用default_factory函數自動建立一個條目,該函數返回一個空列表。
而後 list.append( )操做將該值附加到新列表中。
當再次遇到key時,查找正常進行(返回該key的列表),而且list.append( )操做會向列表添加另外一個值。
這種技術比使用dict.setdefault()的等效技術更簡單,更快捷:(看圖就懂了 - -!)
將default_factory設置爲int可以使defaultdict對計數有用(如其餘語言中的bag(包)或multiset(多重集)):
當第一次遇到字母時,它在映射中不存在,所以default_factory函數調用int()以提供默認計數爲零。 而後遞增操做爲每一個字母構建計數。
始終返回零的函數int( )只是常量函數的一個特例。 建立常量函數的更快、更靈活的方法是使用能夠提供任何常量值(不單單是零)的lambda函數:
將default_factory設置爲set會使defaultdict對構建集合字典頗有用: