2010-05-12 58 views
0

我有這一段代碼,這在我看來是相當醜陋,我不知道如何可以做到更好:小Python代碼重構

if dic.get(key, None) is None: 
    dic[key] = None 

點高雅;-)

回答

7
if key not in dic: 
    dic[key] = None 

這可能不像Olivier的代碼那麼簡短,但至少它明確且快速。

請不要使用dict作爲變量名稱,它是內置的陰影。現在

10
d.setdefault(key) # sets d[key] to None if key is not in d 
+0

你不需要顯式地使用'None','default'參數默認爲'None' – SilentGhost 2010-05-12 14:30:07

+0

@SilentGhost:呵呵,我意識到這一點,並在你寫評論的同時改變了我的答案。 :-) – 2010-05-12 14:34:27

+0

由於它實現了C中的檢查並因此避免了所有的臨時引用計數,所以這比其他任何方法都快*速度更快。 – 2010-05-12 18:32:59

3
import collections 

mydict = collections.defaultdict(lambda: None) 

,以mydict[akey]任何訪問將(如果akey不存在如在mydict一個鍵)設定mydict[akey]None作爲副作用。

請注意,defaultdict的初始值設定項要求無參數可調用,因此lambda