2016-04-10 34 views

回答

3

提供給defaultdict構造函數的參數必須是一個零參數調用(見docs),所以defaultdict(defaultdict)的工作,但defaultdict(defaultdict(set))沒有。你可以「騙」雖然有點:

d = defaultdict(lambda: defaultdict(set)) 

您提供一個零參數的lambda功能這反過來,調用時,返回你要適當的默認值的形式調用的方式。

+0

謝謝,這使得有很大的意義。如果我有這個權利,默認(set)返回一個對象,如上所述,而不是一個類型;因此,外部defaultdict的實例化會引發錯誤,因爲它接收對象。我不能這樣做,技術上,然後: defaultdict(type(defaultdict(set)) –

+0

沒關係;這也產生了問題,因爲它沒有實例化內部字典,而只是給一個類型 –

+0

這'一個聰明的主意,但我認爲它不起作用,'type(defaultdict(set))'是'defaultdict',其中缺省的可調用會丟失。 – schwobaseggl

1

您需要爲defaultdict構造函數提供一個函數,而defauldict(set)則爲defaultdict對象。如果你想建立一個defaultdict其值defaultdicts你可以使用lambda表達式:

from collections import defaultdict 

dd = lambda: defaultdict(dd) 
x = dd() 
x['foo']['bar']['foobar'] = 1