2014-07-24 33 views
3

最近我使用一些大型辭書被(大的意義〜數千個元素),所以我一直在使用這個小傢伙:正在處理或提高Python異常的效率嗎?

try: 
    dict[key] 
    #do something 
except KeyError: 
    pass 

在地方的

if key in dict.keys() 
    #do something 

我想知道哪個字典大小前者變得比後者更有效率?根據我的理解,如果keys()很小,第二種方法會更快,但是在什麼時候開始變得更好使用第一種方法?

回答

4

當你

if key in dict.keys(): 

的Python 2.x中所要做的O(N)的比較發現,如果keydict與否,因爲dict.keys()返回鍵的列表。 (但是,這是在Python 3.x的罰款,因爲它返回一組類視圖對象,查找會更快)

相反,利用恆定的時間查找這樣

if key in dict: 

這將計算key的散列並在dict中查找。

+0

或者,我個人最喜歡的:a = dict.get(key,None) – fileoffset

+0

@fileoffset真,如果你想避免異常並獲得默認值,你可以這樣做。但OP正在嘗試做關鍵查找,所以我會用'in'方法解決:-) – thefourtheye

+0

我同意 - 雖然你可以做一個:如果一個:來模擬這個:) – fileoffset