2015-12-30 34 views
1

我有一個固定的字符串列表。我需要檢查這些字符串是否是字典中的一個鍵(只需要True或False)。我可以去檢查是否有任何密鑰列表出現在字典中

 
if 'asdf' in dict or 'qwer' in dict or 'zxcv' in dict ... : 
    ... do important secret stuff ... 

但它似乎並不理想。有沒有更習慣於這樣做的方式?

+0

閱讀文檔「任何」.. –

+0

你究竟在做什麼? –

+0

檢查POST請求輸入 –

回答

12

你可以使用any並要檢查每個鍵遍歷

if any(key in dict for key in ['asdf', 'qwer', 'zxcf']): 
    # contains at least one of them 

這將短路和在發現第一個匹配返回True,還是會迴歸False如果仍然沒有找到。

+1

啊!正是我在找什麼。 –

3

您還可以使用&

keys = ['asdf', 'qwer', 'zxcf'] 
if d.keys() & keys: 
    print(d) 

您需要d.viewkeys()爲python2。

或者,使密鑰的set,看看集是不相交與否,這將是最快的方法:

keys = {'asdf', 'qwer', 'zxcf'} 

if not keys.isdisjoint(d): 
    print(d) 
+0

運行您的第一個代碼段時,出現TypeError異常。我應該改變那裏的東西嗎? – Nabin

+1

@Spiderman,你使用的是Python 2還是3?如果使用python2,你將會得到一個帶有'if d.keys()&keys'的TypeError,就像你需要調用'viewkeys'一樣。 –

+1

是的,我使用2.7 :)感謝您的迴應。 – Nabin

1

,你可以嘗試使用Python列表理解:

if any([True for entry in your_list if entry in dict]): 
    --dostuff-- 

編輯:CoryKramer建議刪除'[]'爲了使這個發電機,而不是評估整個列表之前檢查是否有任何元素是「真」:

if any(True for entry in your_list if entry in dict): 
    --dostuff-- 
+0

哦,不錯的加法。感謝CoryKramer! – lstbl

相關問題