2010-05-12 59 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