2013-06-17 13 views
32

निम्नलिखित प्रारूप में पाइथन शब्दकोशों की एक सूची है। एक विशिष्ट नाम खोजने के लिए आप खोज कैसे करेंगे?पायथन शब्दकोशों की सूची में मूल्य कैसे खोजें?

label = [{'date': datetime.datetime(2013, 6, 17, 8, 56, 24, 2347), 
      'name': 'Test', 
      'pos': 6}, 
      {'date': datetime.datetime(2013, 6, 17, 8, 56, 24, 2347), 
       'name': 'Name 2', 
      'pos': 1}] 

निम्नलिखित काम नहीं किया:

if 'Test' in label[name] 

'Test' in label.values() 

उत्तर

51

आप अपनी सूची में सभी शब्दकोशों के माध्यम से खोज करने के लिए होगा; एक जनरेटर अभिव्यक्ति के साथ any() का उपयोग करें:

any(d['name'] == 'Test' for d in label) 

यह शॉर्ट सर्किट होगा; True पर वापस पहले मिलान मिल गया है, या False वापस लौटें यदि कोई भी शब्दकोश मिलान नहीं करता है।

+1

आप '(घ में 'नाम') और डी [ 'नाम'] चाहते हो सकता है == query' यदि 'नाम' फ़ील्ड मौजूद नहीं हो सकता है। ('d.get ('name') == क्वेरी' छोटा है लेकिन क्वेरी == कोई नहीं, अगर कुछ अजीब कारण के लिए नाम फ़ील्ड कोई नहीं हो सकता है) – ninjagecko

28

तुम भी के बाद हो सकता है:

>>> match = next((l for l in label if l['name'] == 'Test'), None) 
>>> print match 
{'date': datetime.datetime(2013, 6, 17, 8, 56, 24, 2347), 
'name': 'Test', 
'pos': 6} 

या संभवतः अधिक स्पष्ट रूप से:

match = None 
for l in label: 
    if l['name'] == 'Test': 
     match = l 
     break 
संबंधित मुद्दे