सरल प्रश्न: क्या शब्दकोश में कई कुंजियों के अस्तित्व की जांच करने के लिए कोई शॉर्टेंड है?एक शब्दकोश में कुंजी के लिए पायथनिक लघुरूप?
'foo' in dct and 'bar' in dct and 'baz' in dct
सरल प्रश्न: क्या शब्दकोश में कई कुंजियों के अस्तित्व की जांच करने के लिए कोई शॉर्टेंड है?एक शब्दकोश में कुंजी के लिए पायथनिक लघुरूप?
'foo' in dct and 'bar' in dct and 'baz' in dct
आप एक 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 पात्रों की बचत होती है (लेकिन यदि आप जांच करने के लिए एक लंबी सूची है आप एक बहुत अधिक की बचत होगी)।
all(x in dct for x in ('foo','bar','baz'))
बहुत अच्छा। धन्यवाद! – davidchambers
+1 जो सेक्सी है ... – sholsapp
{"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()
यह एक साफ विकल्प है, और आईएमएचओ का प्रदर्शन करता है कि टिमटोटीडी अपरिहार्य है; दुर्भाग्यवश,
यह ओ (एन) के बजाय अन्य लोगों के लिए ओ (एन) होगा। यह देखने के लिए आपको डच भी नहीं होना चाहिए कि यह कितना भयानक होगा यदि यह आदेश बहुत बड़ा है। – geoffspear
सेट कन्स्ट्रक्टर कॉल में त्रुटि के लिए धन्यवाद और ऑपरेटर का उल्लेख करने के लिए धन्यवाद। मुझे नहीं लगता कि हे (एन), ओ पी के मामले में दर्द होता है, हालांकि, क्योंकि वह मैन्युअल पायथन 3. के बारे में प्रत्येक कुंजी :) –
उपयोगी उत्तर को शामिल करने के लिए इस उत्तर को स्वीकार करना। :) – davidchambers
... हालांकि यह @ unutbu के पहले के जवाब को दोहराता है। –
@flying भेड़: जब मैंने अपना टाइप करना शुरू किया तो कोई जवाब नहीं था। मुझे लगता है कि जब मैंने सकारात्मक और नकारात्मक उदाहरण बनाए और कुछ लिंक किए गए संदर्भ जोड़े, तो unutbu शुरू हुआ और टाइपिंग समाप्त हो गया। [अर्थात। मैंने अपना होमवर्क कॉपी नहीं किया ;-)] – Johnsyweb