मुझे पाइथन में बड़े शब्दकोशों के माध्यम से खोज करने की दक्षता के बारे में एक त्वरित प्रश्न था। मैं एक बड़ी अल्पविराम से अलग फ़ाइल पढ़ रहा हूं और प्रत्येक पंक्ति से एक कुंजी और मूल्य प्राप्त कर रहा हूं। यदि मेरी कुंजी पहले से ही शब्दकोश में है, तो मैं शब्दकोश में सूचीबद्ध मान में मान जोड़ रहा हूं, यदि कुंजी शब्दकोश में मौजूद नहीं है, तो मैं बस मान जोड़ता हूं। इससे पहले कि मैं इस का उपयोग कर रहा था:कुशल शब्दकोश खोज रहे हैं?
if key in data_dict.keys():
add values
else:
data_dict[key] = value
यह बहुत तेजी से शुरू होता है, लेकिन जैसा कि शब्दकोश बढ़ता है यह बिंदु है जहां मैं यह बिल्कुल इस्तेमाल नहीं कर सकते करने के लिए, धीमी और धीमी हो जाती है। मैं जिस तरह से मैं यह करने के लिए शब्दकोश में कुंजी के लिए खोज बदल दिया है:
try:
# This will fail if key not present
data_dict[keyStr] = input_data[keyStr] + load_val
except:
data_dict[keyStr] = load_val
यह असीम तेजी से होता है, और पढ़ सकते हैं/लिखने 3 सेकंड में कोड के 350,000 से अधिक लाइनों।
मेरा प्रश्न था कि if key in data_dict.keys():
कमांड try: data_dict[keyStr]
पर कॉल से बहुत अधिक समय लेता है? और शब्दकोश में कुंजी की खोज करते समय पायथन try
कथन का उपयोग क्यों नहीं करेगा?
सामान्य रूप से, आप _all_ अपवादों को पकड़ना नहीं चाहते हैं, लेकिन केवल एक जिसे आप उम्मीद करते हैं और जब यह पाया जाता है तो इसे संभाला जाएगा। यहां, उदाहरण के लिए, उपयोग करें: 'KeyError को छोड़कर: ...' – askewchan
आपका उदाहरण कोड उलझन में है। पहले स्निपेट में आप 'key'' data_dict' में होने के लिए जांच कर रहे हैं, लेकिन दूसरी बात यह है कि आपको 'KeyError' अपवाद देने वाला एकमात्र चीज होगा यदि 'key'' input_data' में नहीं था। यह एक पूर्ण उत्तर प्रदान करना मुश्किल बनाता है ... – martineau