पायथन डिक्शनरी केवल हैशेबल डेटा प्रकारों को एक डिक्शनरी में एक कुंजी के रूप में स्वीकार करते हैं। एक सूची हैश करने योग्य डेटा प्रकार नहीं है। यदि आप किसी सूची को किसी शब्दकोश में एक कुंजी के रूप में निर्दिष्ट करते हैं, तो आपको एक "टाइप एरर:अनहैशेबल टाइप:'लिस्ट'" त्रुटि का सामना करना पड़ेगा।
इस गाइड में, हम इस बारे में बात करते हैं कि इस त्रुटि का क्या अर्थ है और आप इसे अपने कोड में क्यों देखते हैं। हम आपको इस त्रुटि के एक उदाहरण के माध्यम से बताएंगे कि इसे कैसे हल किया जाए।
लेखन त्रुटि:धोने योग्य प्रकार:'सूची'
शब्दकोशों के दो भाग होते हैं:कुंजियाँ और मान। कुंजियाँ किसी विशेष मान से जुड़े लेबल हैं। किसी मान तक पहुँचने के लिए, आपको उस मान के कुंजी नाम का संदर्भ देना होगा।
जबकि मान किसी भी डेटा प्रकार के हो सकते हैं, सूचियों से लेकर स्ट्रिंग्स तक, केवल हैशेबल ऑब्जेक्ट ही कुंजी के रूप में स्वीकार्य हैं। हैशेबल ऑब्जेक्ट एक हैश मान वाली वस्तुएं हैं जो समय के साथ नहीं बदलती हैं। हैशेबल ऑब्जेक्ट्स के उदाहरण टुपल्स और स्ट्रिंग्स हैं।
सूचियों में अपरिवर्तनीय हैश मान नहीं होता है। उनके हैश मान समय के साथ बदल सकते हैं। इसका अर्थ है कि आप किसी सूची को शब्दकोश कुंजी के रूप में निर्दिष्ट नहीं कर सकते हैं।
एक उदाहरण परिदृश्य
आइए एक प्रोग्राम बनाएं जो 75 से अधिक औसत ग्रेड वाले छात्रों की एक सूची बनाता है। इस सूची में प्रत्येक छात्र और उनके ग्रेड के शब्दकोश रिकॉर्ड होंगे। इस शब्दकोश को बनाने के लिए, हम एक स्कूल के सभी छात्रों और उनके ग्रेड की सूची के साथ एक शब्दकोश से काम करेंगे।
आइए अपने शीर्ष छात्रों के लिए छात्रों की सूची और एक शब्दकोश को परिभाषित करके शुरू करें:
<पूर्व>छात्र =[ { "नाम":"लिंडा", "ग्रेड":[84, 82, 65]}, { "नाम":"एलेक्स", "ग्रेड":[67, 68, 83] }, { "नाम":"होली", "ग्रेड":[72, 74, 81] }]top_students ={}
"छात्र" सूची में प्रत्येक मान एक शब्दकोश है। प्रत्येक शब्दकोश में दो कुंजियाँ होती हैं:नाम और ग्रेड। हमने "top_students" नामक एक शब्दकोश को परिभाषित किया है जिसमें हमारे शीर्ष छात्रों के बारे में जानकारी होगी।
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
अब जब हमने इस शब्दकोश को परिभाषित कर लिया है, तो हम उन छात्रों को फ़िल्टर करने के लिए लूप के लिए उपयोग करते हैं जिनके औसत ग्रेड 75 से अधिक हैं और उन्हें अपने नए शब्दकोश में जोड़ते हैं:
छात्रों में s के लिए:औसत =योग(s["grads"]) / len(s["grade"]) अगर औसत> 75:top_students[s["grade"]] =s["name"]
लूप के लिए प्रत्येक पुनरावृत्ति में, हम एक छात्र द्वारा अर्जित सभी ग्रेड के औसत की गणना करते हैं। हम सभी ग्रेडों के योग को कितने ग्रेड दर्ज किए गए हैं, से विभाजित करके ऐसा करते हैं।
इसके बाद, हम जांचते हैं कि क्या औसत 75 से अधिक है। यदि ऐसा है, तो हम छात्र के नाम और उनके ग्रेड के साथ टॉप_स्टूडेंट्स डिक्शनरी में एक नई प्रविष्टि बनाते हैं।
अंत में, हम टॉप_स्टूडेंट्स डिक्शनरी को कंसोल पर प्रिंट करते हैं ताकि हम उन सभी छात्रों को देख सकें जिनका औसत ग्रेड 75 से अधिक है:
प्रिंट करें(top_students)
हमारा कोड चलाएँ और देखें कि क्या होता है:
ट्रेसबैक (सबसे हालिया कॉल अंतिम):फ़ाइल "main.py", पंक्ति 11, <मॉड्यूल> top_students[s["grades"]] =s["name"]TypeError:unhashable type:'list'पूर्व>हमारा कोड सफलतापूर्वक निष्पादित करने में विफल रहता है।
समाधान
हमारा कोड तब तक काम करता है जब तक दुभाषिया लाइन 11 तक नहीं पहुंच जाता। इस लाइन पर, हमारा कोड बताता है:
top_students[s["grade"]] =s["name"]हमारे कोड में त्रुटि इसलिए है क्योंकि हमने एक सूची को एक शब्दकोश में एक कुंजी के रूप में निर्दिष्ट करने का प्रयास किया है। जब हमारा कोड हमारे लूप के पहले पुनरावृत्ति पर इस लाइन को पार्स करता है, तो हमारा कोड निम्नलिखित कुंजी और मान के साथ एक शब्दकोश बनाने का प्रयास करता है:
{ [84, 82, 65]:"लिंडा" }यह एक अमान्य शब्दकोश है। हमारा कोड एक सूची को एक कुंजी के रूप में असाइन करने का प्रयास करता है जो काम नहीं करता है।
इस समस्या को हल करने के लिए, हम ग्रेड की सूची के बजाय छात्र के नाम को शब्दकोश में एक कुंजी के रूप में उपयोग करते हैं:
top_students[s["name"]] =s["grades"]हमने ग्रेड की सूची को कुंजी के बजाय मान के रूप में असाइन किया है। विद्यार्थी का नाम शब्दकोश की कुंजी है। आइए अपना कोड चलाएं:
{'लिंडा':[84, 82, 65], 'होली':[72, 74, 81]}हमारा कोड शीर्ष प्रदर्शन करने वाले छात्रों के बारे में जानकारी के साथ सफलतापूर्वक एक शब्दकोश बनाता है। कोई भी छात्र जिसका पिछले तीन परीक्षणों में औसत ग्रेड 75 से अधिक है, को शब्दकोश में जोड़ा गया था।
हमारा शब्दकोश इस प्रकार टूटता है:
- कुंजी:लिंडा, होली
- मान:[84, 82, 65], [72, 74, 81]
चूँकि अब हम अपने प्रमुख नामों को तार निर्दिष्ट कर रहे हैं, हमारा कोड काम करता है।
निष्कर्ष
जब आप किसी सूची को किसी शब्दकोश में कुंजी के रूप में निर्दिष्ट करने का प्रयास करते हैं तो "लेखन त्रुटि:अप्राप्य प्रकार:'सूची'" त्रुटि उत्पन्न होती है। इस त्रुटि को हल करने के लिए, सुनिश्चित करें कि आप केवल एक हैशेबल ऑब्जेक्ट, जैसे स्ट्रिंग या टपल, को डिक्शनरी की कुंजी के रूप में असाइन करते हैं।
अब आप एक पेशेवर कोडर की तरह इस त्रुटि को हल करने के लिए तैयार हैं!