2010-05-11 16 views
8

मैं निम्नलिखित शब्दकोश है:आप पाइथन शब्दकोश में कई कुंजियों की उपस्थिति की जांच कैसे करते हैं?

sites = { 
    'stackoverflow': 1, 
    'superuser': 2, 
    'meta': 3, 
    'serverfault': 4, 
    'mathoverflow': 5 
} 

अगर वहाँ ऊपर शब्दकोश में एक से अधिक कुंजी उपलब्ध हैं जाँच करने के लिए, मैं की तरह कुछ करना होगा:

'stackoverflow' in sites and 'serverfault' in sites 
ऊपर

केवल 2 के साथ पोषणीय है कुंजी लुकअप क्या एक बहुत बड़ा शब्दकोश में बड़ी संख्या में चाबियों की जांच करने के लिए एक बेहतर तरीका है?

उत्तर

12

आप dict की चाबियाँ हैं एक सेट का नाटक कर सकते हैं, और उसके बाद का उपयोग set.issubset:

set(['stackoverflow', 'serverfault']).issubset(sites) # ==> True 

set(['stackoverflow', 'google']).issubset(sites) # ==> False 
9

आप all इस्तेमाल कर सकते हैं:

print(all(site in sites for site in ('stackoverflow','meta'))) 
# True 
print(all(site in sites for site in ('stackoverflow','meta','roger'))) 
# False 
+0

सभी के लिए +1 और जनरेटर अभिव्यक्ति है, लेकिन -1 '(पर अतिरिक्त कोष्ठक के लिए _ साइटों में) 'और' _' को आपके चर नाम के रूप में उपयोग करने के लिए। मुझे एहसास है कि जो भी आप उपयोग करते हैं वह एक फेंकने वाला चर है, लेकिन एक _ _' एक परिवर्तनीय नाम के रूप में किसी भी तरह से मेरी समझ को धीमा कर देता है। क्यों न केवल सभी (एस '(' स्टैक ओवरफ्लो ',' मेटा ') के लिए साइट्स में हैं) '। यह वास्तव में सेट-आधारित समाधान पर एक लाभ है जिसमें जांच करने के लिए साइटों की लंबी सूची का एक सेट बनाना आवश्यक नहीं है, और जैसे ही पहली मेलसमूह मिलती है, 'सभी' शॉर्ट-सर्किट पाएंगे। – PaulMcG

+0

@ पॉल, आपकी टिप्पणी के लिए धन्यवाद। मैं क्या कह सकता हूं, लेकिन, मैं सहमत हूं! तकनीकी योग्यता के आपके अवधारणात्मक निर्णय के लिए – unutbu

+0

+1! – PaulMcG

0

कितने लुकअप तुम क्या करने की योजना बना रहे हैं? मुझे लगता है कि आप जिस विधि का उपयोग कर रहे हैं वह ठीक है।

यदि दर्जनों, सैकड़ों, आदि कुंजी हैं जो आप की तुलना कर रहे हैं तो आप सभी लक्ष्य कुंजी को सूची में डाल सकते हैं और फिर सूची में फिर से चालू हो सकते हैं, यह सुनिश्चित करने के लिए जांचें कि प्रत्येक आइटम शब्दकोश में है।

1
mysites = ['stackoverflow', 'superuser'] 
[i for i in mysites if i in sites.keys()] # ==> sites in the list mysites that are in your dictionary 
[i for i in mysites if i not in sites.keys()] # ==> sites in the list mysites that are not in your dictionary 
+0

आपको '.keys()' की आवश्यकता नहीं है और शायद इसका उपयोग नहीं करना चाहिए। यह ऐसी सूची बनाता है जिसकी आपको आवश्यकता नहीं है और इसके बिना 'इन' कथन को ओ (एन) के बजाय ओ (1) में बदल देता है। इसके अलावा, यह एक बहुत ही पठनीय तरीका है कि कौन सी साइटें शब्दकोश के हिस्से (नहीं) हैं। – tgray

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