2009-10-16 16 views
14

मैं निम्न डेटा संरचना है:शब्दकोशों की सूची में पायथन शब्दकोश मान खोजने का सबसे अच्छा तरीका क्या है?

data = [ 
     {'site': 'Stackoverflow', 'id': 1}, 
     {'site': 'Superuser', 'id': 2}, 
     {'site': 'Serverfault', 'id': 3} 
    ] 

मैं उपरोक्त सूची खोज करने के लिए अगर यह एक विशिष्ट मूल्य के साथ किसी भी साइट है देखना चाहता हूँ। उदाहरण के लिए, उपरोक्त को यह देखने के लिए खोजें कि सूची में साइट = 'सुपरसुर' के साथ एक शब्दकोश है या सही/गलत लौटाएं। मैं उपरोक्त प्रत्येक आइटम पर लूपिंग के सामान्य तरीके से और तुलना कर सकता हूं। क्या खोज प्राप्त करने का कोई वैकल्पिक तरीका है?

+3

वहाँ अनुकूलन अगर डेटा सॉर्ट हो जाता है कर रहे हैं। यदि नहीं, तो बस 'किसी भी() 'समाधान का उपयोग करें। – Triptych

उत्तर

25
any(d['site'] == 'Superuser' for d in data) 
+9

वाह, हमने * सटीक * एक ही सामग्री को एक दूसरे के 10 सेकंड के भीतर पोस्ट किया। मान लीजिए मैं अपना मिटा दूंगा। :( – FogleBird

+1

ध्यान दें कि यह बिल्कुल "प्रत्येक आइटम पर लूपिंग और उनकी तुलना", जो थियरी लैम नहीं चाहता था। – nosklo

+0

मुझे लगता है कि उसका मतलब नियमित रूप से 'लूप' था। –

4

सूचियों को पूरी तरह से लूप की आवश्यकता होती है। यही सूची है।

लूपिंग से बचने के लिए आपको सूचियों से बचने के लिए है।

आप खोज कुंजी और वस्तुओं के शब्दकोश चाहते हैं।

sites = dict((d['site'],d) for d in data) 
ids = dict((d['id'],d] for d in data) 

अब तुम एक पाश के बजाय टुकड़ों में बंटी देखने का उपयोग कर sites["Superuser"] साथ 'सुपर उपयोगकर्ता' के साथ जुड़े आइटम मिल सकता है।

1

मैं अजगर वाक्य रचना के बारे में सुनिश्चित नहीं कर रहा हूँ, लेकिन यह इस तरह से आप के लिए काम कर सकते हैं। अपनी प्राथमिक डेटा संरचना का निर्माण करते समय, समानांतर एक भी बनाएं जो साइट नाम पर एक हैश या सहयोगी सरणी है; फिर यह देखने के लिए कि कोई दी गई साइट मौजूद है या नहीं, आप साइट नाम के साथ हैश में एक लुकअप का प्रयास करते हैं। यदि यह सफल होता है, तो आप जानते हैं कि उस साइट के लिए आपकी डेटा संरचना में एक रिकॉर्ड है और आपने हैश तकनीक के आधार पर इसे हैश लुकअप (संभवतः ओ (1) या ओ (लॉग 2 (एन)) के समय में किया है) सूची ट्रैवर्सल के ओ (एन/2) के।

(जबकि लेखन अद्यतन: यह काफी क्या S.Lott तैनात है)

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