2012-10-15 73 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