2012-10-15 50 views
1

如果我在字典上设置了默认值,是否可以在覆盖后返回默认值?可以通过setdefault获取默认值

像这样:

dd = {} 
dd.setdefault('beverage':'A nice cup of tea') 
... 
dd['beverage'] = 'Yellow urine' 
... 
if dd['beverage'] not in list_of_valid_beverages: 
    # If the beverage has been contaminated revert to default. 
    # Something like any of the following? 
    dd['beverage'] = dd.getdefault('beverage') 
    dd['beverage'].clear() 
    del dd['beverage'] 
... 
print dd['beverage'] 

我的猜测是,这是不可能用普通字典。问鼎声明

DD [ '饮料'] = '小便黄'

执行茶是永远失去了。但这将是一个很好的功能:-)

任何人有更深入的了解?

回答

4

不,这是不可能的。所有setdefault做如下逻辑:

if key not in the_dict: 
    the_dict[key] = value 
return the_dict[key] 

它不会特殊对待“默认”值,不存储它比你覆盖的位置之外的任何地方。

如果你想要一组持久的默认值,你最好只保留一个单独的dict的默认值。

+0

值得注意的是,你可以继承'defaultdict'并覆盖'__missing__'函数,这样你就可以得到一个新的类,该类记录何时调用__missing__'并保存新构造的默认值。 – torek