2011-08-13 69 views

回答

7

可以使用all()generator expression

>>> all(x in dct for x in ('foo', 'bar', 'qux')) 
False 
>>> all(x in dct for x in ('foo', 'bar', 'baz')) 
True 
>>> 

它爲您節省了高達2個字符(但將有更多救你,如果你有一個較長的列表,以檢查)。

+1

接受這個答案感謝包含有用的鏈接。 :) – davidchambers

+0

...雖然它重複了@unutbu早期的答案。 –

+0

@飛羊:我開始打字時沒有答案。我想unutbu開始和完成打字,而我創造了積極和消極的例子,並添加了一些鏈接的參考。 [即我沒有複製他的家庭作業;-)] – Johnsyweb

5
{"foo","bar","baz"}.issubset(dct.keys()) 

對於Python < 2.7,你就必須更換一套文字與set(["foo","bar","baz"])

如果你喜歡運營商和不介意創造另一組的性能,可以在使用<=操作該集和字典的鍵集。

兩個變化結合會是什麼樣子:

set(["foo","bar","baz"]) <= set(dct) 

最後,如果你使用Python 3,dict.keys()會返回一個setlike對象,這意味着你可以撥打運營商沒有性能損失是這樣的:

{"foo","bar","baz"} <= dct.keys() 
+0

這是一個很好的選擇,並演示恕我直言,TIMTOWTDI是不可避免的;不幸的是,<= 2.6中的'set'不需要'* args' - 你需要明確地傳遞一個序列(另一組括號)。 –

+1

對於其他人,這將是O(n)而不是O(1)。如果字典非常大,你甚至不必成爲荷蘭人,看看這會有多糟糕。 – geoffspear

+0

感謝設置構造函數調用和提及操作符的錯誤。我不認爲O(n)的傷害在OP的情況下,雖然,因爲他是從手動檢查有關Python 3.每個按鍵:) –