1. 程式人生 > >python字典結構get()方法的陷阱

python字典結構get()方法的陷阱

字典是python中常用的資料結構,get()方法可用來判斷字典中是否存在對應的key,但是當該key的對應value為0時,使用該方法來判斷key是否存在容易出錯。
get()方法使用如下:

mydict.get(1)
#假如字典中存在key為1的鍵值對,那麼返回1對應的value值,如果不存在則返回None
mydict.get(1, -1)
#假如字典中存在key為1的鍵值對,那麼返回1對應的value值,如果不存在則返回-1

我們時常需要使用get()方法的返回值來判斷字典中是否存在這個key值,如下:

mydict = {1:0, 2:3}
if mydict.get(1):
    print
"key = 1 exists" else: print "key = 1 not exists" if mydict.get(2): print "key = 2 exists" else: print "key = 2 not exists"

執行的結果如下:
這裡寫圖片描述
可見,該程式正確判斷了key = 2的存在,卻錯誤判斷key = 1不存在。
原因是:mydict[1] = 0,所以,mydict.get(1)的返回值為0,而0在條件中代表的是False,所以結果錯誤
該錯誤的原因是很簡單的,這也沒有涉及語言的原則性錯誤,但是它確實很容易導致我們產生錯誤,所以在判斷字典元素是否存在時,更好的程式碼應該是這樣的:

mydict = {1:0, 2:3}
if mydict.get(1) != None:
    print "key = 1 exists"
else:
    print "key = 1 not exists"
if mydict.get(2) != None:
    print "key = 2 exists"
else:
    print "key = 2 not exists"

執行結果為:
這裡寫圖片描述
結果正確,當然如果你定義不存在的時候返回的值不是None,那就要把None換成那個值了。但是這還是會有一點隱患,假如你定義不存在時返回值ret,如果該值在字典中對應的value就是ret那就又出錯了,所以挑選這個值的時候應該根據使用環境挑選。