2017-04-01 27 views
-1

我一直在使用我的代碼以下語法檢查的一個關鍵的存在:如果在dict中使用'key',而不是如果dict.get('key')不是None:?

if dict.get("key") is not None: 
    print "key found" 

然而,我在別人的代碼見過的語法如下:

if 'key' in dict: 
    print "key found" 

我只是想知道哪種方式最好表達一個字典關鍵的空檢查,以及是否有優勢(如果有的話)使用其中一個。

我看到了關於使用.get()的替代方法的similar question存在的問題,但只是想知道在我提供的兩個示例之間是否有任何優勢。

+0

爲什麼要將密鑰發送給函數並檢查一個默認值,而不是簡單地告訴它去做你真正想要的? – TigerhawkT3

+0

@ TigerhawkT3這是一個很好的問題,它可能適合有比我更多Python體驗的人。 –

回答

1

如果與價值的關鍵入口None兩個表達式將返回不同的結果:

>>> d = {'key': None} 
>>> d.get("key") is not None 
False 
>>> 'key' in d 
True 

如果您要檢查在字典中是否存在關鍵,in經營者應當使用;它也使你的意圖更清晰。此外,它也適用於其他序列類型(例如,list,tuple等)

順便說一句,不要使用dict作爲變量名稱;它會影響內置函數/類型dict

+0

謝謝你。我知道字典關鍵字。我用它來演示目的。 –

+0

@WillemvanKetwich,FYI,'dict'不是關鍵字。如果它是關鍵字,則不能將其用作變量名稱。 – falsetru

+0

道歉 - 數據結構。關於其他序列類型的有趣的旁註,BTW。 –

1

這樣比較好。

if 'key' in dict: 
    print "key found" 

而且,@falsetrue指出,如果你有一個None值的dictif d.get('key') is not None成爲False這可能不是預期的行爲。

dict.get當您使用表達式中的值並且想要在key不在dict中時使用默認值時非常有用。

d['key'] = 4 
a = 5 + d.get('key', 0) # returns 0 if `key` is not in `d` 
1

這兩種方式是不同的。

dict.get("key") is not None表示字典具有「鍵」字典[「鍵」]不是無。

"key" in dict意味着詞典有「關鍵」,不關心它的價值是無或其他。

+1

我解釋的是'dict.get(「key」)不是None而不是單個'dict.get(「key」)'。 – gzc

相關問題