2017-08-12 36 views
4

使用不當時我記得這個例子到底是什麼類型的拉姆達與defaultdict

from collections import defaultdict 
d_int = defaultdict(int, a=10, b=12, c=13) 
d_int.default_factory = lambda: 1 
d_int['d'] 
1 

當我們通過一個未知鍵返回默認值,而不是錯誤,我理解這一點。 但在這個SO問題中,populating a nested dictionary事情變得更加複雜。

final = collections.defaultdict(lambda: collections.defaultdict(list)) 

lambda類型在這種情況下做什麼?

回答

2

這種默認字典對於2級數據很有用。類似這樣的:

{ k11 : { k21 : [...], k22 : [...] }, k12 : { ... } } 

在這裏,每個字典是defaultdict

lambda的回報defaultdict用於第二級,當第一電平鍵不存在:

In [234]: final['k11'] # first level access 
Out[234]: defaultdict(list, {}) 

In [235]: final['k11']['k21'] # second level access 
Out[235]: [] 
2

defaultdict需要一個函數(工廠)。

在第二種情況下,您需要創建collections.defaultdict(list)。爲此,您需要一個函數,並且使用生成新對象的lambda來定義此函數更爲簡單。