2011-08-13 17 views

उत्तर

7

आप एक generator expression साथ all() उपयोग कर सकते हैं:

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

यह आप एक whopping 2 पात्रों की बचत होती है (लेकिन यदि आप जांच करने के लिए एक लंबी सूची है आप एक बहुत अधिक की बचत होगी)।

+1

उपयोगी उत्तर को शामिल करने के लिए इस उत्तर को स्वीकार करना। :) – davidchambers

+0

... हालांकि यह @ unutbu के पहले के जवाब को दोहराता है। –

+0

@flying भेड़: जब मैंने अपना टाइप करना शुरू किया तो कोई जवाब नहीं था। मुझे लगता है कि जब मैंने सकारात्मक और नकारात्मक उदाहरण बनाए और कुछ लिंक किए गए संदर्भ जोड़े, तो unutbu शुरू हुआ और टाइपिंग समाप्त हो गया। [अर्थात। मैंने अपना होमवर्क कॉपी नहीं किया ;-)] – Johnsyweb

8
all(x in dct for x in ('foo','bar','baz')) 
+0

बहुत अच्छा। धन्यवाद! – davidchambers

+0

+1 जो सेक्सी है ... – sholsapp

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

अजगर < 2.7 के लिए, आप set(["foo","bar","baz"])

आप ऑपरेटरों पसंद है और एक और सेट बनाने के प्रदर्शन को कोई आपत्ति नहीं है, तो आप पर <= ऑपरेटर का उपयोग कर सकते हैं के साथ सेट शाब्दिक प्रतिस्थापित करना होगा सेट और dict की keyset।

दोनों रूपों कैसा दिखेगा संयुक्त: अंत में

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

, यदि आप अजगर 3 का उपयोग करें, dict.keys() एक setlike वस्तु वापस आ जाएगी, जिसका मतलब है कि आप इस तरह से प्रदर्शन दंड के बिना ऑपरेटर कॉल कर सकते हैं:

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

यह एक साफ विकल्प है, और आईएमएचओ का प्रदर्शन करता है कि टिमटोटीडी अपरिहार्य है; दुर्भाग्यवश,

+1

यह ओ (एन) के बजाय अन्य लोगों के लिए ओ (एन) होगा। यह देखने के लिए आपको डच भी नहीं होना चाहिए कि यह कितना भयानक होगा यदि यह आदेश बहुत बड़ा है। – geoffspear

+0

सेट कन्स्ट्रक्टर कॉल में त्रुटि के लिए धन्यवाद और ऑपरेटर का उल्लेख करने के लिए धन्यवाद। मुझे नहीं लगता कि हे (एन), ओ पी के मामले में दर्द होता है, हालांकि, क्योंकि वह मैन्युअल पायथन 3. के बारे में प्रत्येक कुंजी :) –

संबंधित मुद्दे