我正在用python(2.7)做一個數據挖掘作業。我爲所有單詞(存在於類別中)創建了一個權重詞典,並且表示在該詞典中不存在的單詞,我想指定默認值。 首先,我在每次使用setdefault之前嘗試過,它完美地工作,但不知何故,我認爲它看起來並不那麼pythonic。因此,我嘗試使用defaultdict,大多數情況下工作得很好。但是,有時會返回不正確的值。首先,我認爲這可能是由defaultdict或lambda函數引起的,但顯然沒有錯誤。將值賦給不存在的對象屬性
for node in globalTreeRoot.traverse():
...irrelevant...
weight_dict = {.......}
default_value = 1.0/(totalwords + dictlen)
node.default_value = 1.0/ (totalwords + dictlen)
......
node.weight_dict_ori = weight_dict
node.weight_dict = defaultdict(lambda :default_value,weight_dict)
所以,當我試圖打印一個在循環中不存在的值時,它給了我一個正確的值。但是,代碼完成運行後,當我嘗試:
print node.weight_dict["doesnotexist"],
它給了我一個不正確的值,當通常不正確相關的一些其他節點的值。我試過搜索python命名系統或動態地給對象屬性賦值,但沒搞清楚。
順便提一句,是defaultdict比更快存在使用它(K,V)每次?
只是爲了明確的OP,'get'的兩個參數形式允許指定一個默認值,如果指定的鍵不存在於字典中,則返回一個默認值。 –
謝謝!我認爲** get(key,defaultvalue)**正是我所期待的。此外,感謝您解釋「關閉」。我想我誤解了它的變量範圍方法。 –