2012-06-12 17 views
50

में मौजूद मैं एक शब्दकोश है कि उस तरह दिखता है:अजगर की जांच करता है, तो कुंजी की सूची शब्दकोश

grades = { 
     'alex' : 11, 
     'bob' : 10, 
     'john' : 14, 
     'peter': 7 
     } 

और नाम students = ('alex', 'john')

मैं जाँच करने के लिए है कि students में सभी के नाम के रूप में मौजूद जरूरत है की एक सूची grades dict में कुंजियां।

grades अधिक नाम हो सकता है, लेकिन students में सभी के नाम grades

में होना चाहिए यह करने के लिए एक सरल तरीका होना चाहिए, लेकिन मैं अभी भी अजगर करने के लिए नया हूँ और यह समझ नहीं कर सकते हैं। if students in grades कोशिश की, काम नहीं किया।

वास्तविक मामलों में, सूचियां बहुत बड़ी होंगी।

+0

संभावित डुप्लिकेट [मैं कैसे जांच सकता हूं कि एकाधिक कुंजी एक ही पास में एक dict में हैं?] (Https://stackoverflow.com/questions/1285911/how-do-i-check-that-multiple-keys -अयर-इन-ए-डॉक-इन-ए-सिंगल-पास) –

उत्तर

107

उपयोग all():

if all(name in grades for name in students): 
    # whatever 
+25

@chaft: यहां तक ​​कि उदाहरण कोड [सही होना चाहिए] (http://sscce.org/#co)। –

+1

@SvenMarnach: अगर मैं आपकी टिप्पणी को एक से अधिक बार वोट दे सकता हूं, तो मैं चाहता हूं। – MattH

+0

बढ़िया! यदि स्थिति गलत है तो डिक से अनुपस्थित तत्वों को प्राप्त करने का कोई शॉर्टकट तरीका? – guival

17
>>> grades = { 
     'alex' : 11, 
     'bob' : 10, 
     'john' : 14, 
     'peter': 7 
} 
>>> names = ('alex', 'john') 
>>> set(names).issubset(grades) 
True 
>>> names = ('ben', 'tom') 
>>> set(names).issubset(grades) 
False 

यह कॉलिंग class अमान्य तो मैं यह names करने के लिए बदल रहा है।

+0

यह 'सभी() 'के विपरीत, शॉर्ट-कट नहीं हो सकता है। यह हमेशा ओ (एम + एन) होगा, जहां एम और एन 'नाम' और 'ग्रेड' के संबंधित आकार हैं। 'सभी() 'का उपयोग ओ (एम) होगा, और शॉर्ट-कट हो सकता है। –

+3

@ स्वेनमार्कैच राइट, मैं इसे यहां छोड़ दूंगा क्योंकि यह एक और दृष्टिकोण है लेकिन मैं मानता हूं कि आपका सबसे अच्छा है। – jamylak

+0

निश्चित रूप से इसे यहां छोड़ दें! यह किसी भी मामले में एक दिलचस्प दृष्टिकोण है। –

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