Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन टाइप एरर:अप्राप्य प्रकार:'तानाशाह' समाधान

एक शब्दकोश में एक कुंजी के रूप में क्या उपयोग किया जा सकता है, इसके बारे में पायथन भाषा विशिष्ट है। पायथन डिक्शनरी में, सभी कुंजियाँ धोने योग्य होनी चाहिए।

यदि आप किसी डिक्शनरी में कुंजी जोड़ते समय एक अप्राप्य कुंजी प्रकार का उपयोग करने का प्रयास करते हैं, तो आपको "TypeError:unhashable type:'dict'" त्रुटि का सामना करना पड़ेगा।

इस गाइड में, हम इस बारे में बात करते हैं कि इस त्रुटि का क्या अर्थ है और इसे क्यों उठाया जाता है। हम इस त्रुटि के एक उदाहरण के माध्यम से चलते हैं ताकि आप सीख सकें कि इसे अपने कोड में कैसे हल किया जाए।

लेखन त्रुटि:धोने योग्य प्रकार:'तानाशाही'

शब्दकोशों में दो भाग होते हैं:कुंजियाँ और मान। कुंजियाँ वे पहचानकर्ता हैं जो किसी मान से बंधी होती हैं। जब आप किसी कुंजी का संदर्भ देते हैं, तो आप उस कुंजी से संबद्ध मान प्राप्त करने में सक्षम होंगे।

शब्दकोश में केवल हैशेबल ऑब्जेक्ट ही कुंजी हो सकते हैं। कुछ अपवादों के साथ अपरिवर्तनीय वस्तुएं जैसे तार, पूर्णांक, टुपल्स और फ्रोजनसेट हैशेबल हैं। इसलिए, शब्दकोशों को शब्दकोश में कुंजी के रूप में उपयोग नहीं किया जा सकता है।

शब्दकोश में कोई आइटम जोड़ने के लिए, आपको एक मान्य हैशेबल कुंजी निर्दिष्ट करनी होगी। उदाहरण के लिए, "नाम" एक मान्य कुंजी है, लेकिन { "नाम":"परीक्षण" } नहीं है।

एक उदाहरण परिदृश्य

यहां, हम एक प्रोग्राम लिखते हैं जो उन सभी केक को जोड़ता है जो एक बेकरी में एक शब्दकोश से दूसरे शब्दकोश में पांच बार से अधिक बेचे गए हैं।

केक की एक सूची घोषित करके प्रारंभ करें जिसमें प्रत्येक केक के बारे में शब्दकोश शामिल हैं। हम एक शब्दकोश भी परिभाषित करते हैं जिसमें हम उन केक को स्टोर कर सकते हैं जो पांच से अधिक बार बेचे गए हैं।

81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।

बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।

cakes = [
	{
"name": "Black Forest Gateau", "sold": 3
},
{
"name": "Carrot Cake", "sold": 7
},
{
"name": "Coconut and Lime Cake", "sold": 9
}
]
sold_more_than_five = {}

हमारी "केक" सूची में तीन शब्दकोश हैं। प्रत्येक शब्दकोश में दो कुंजियाँ और मान होते हैं। प्रमुख नाम "केक" और "बेचा" हैं।

अब, हम एक लूप के लिए लिखते हैं जो हमारे केक की सूची के माध्यम से जाता है और उन केक को ढूंढता है जो पांच से अधिक बार बेचे गए हैं। उन केक को “sold_more_than_five” डिक्शनरी में जोड़ा जाएगा:

for c in cakes:
	if c["sold"] > 5:
		sold_more_than_five[c] = c["sold"]
		print(c["name"] + " has been sold more than five times.")

print(sold_more_than_five)

हमारे लूप के लिए, हम तुलना करते हैं कि क्या प्रत्येक शब्दकोश में "बेचा" का मान 5 से अधिक है। यदि ऐसा है, तो वह आइटम हमारे "sold_more_than_five" शब्दकोश में जोड़ा जाता है। फिर, कंसोल पर एक संदेश मुद्रित होता है जो उपयोगकर्ता को सूचित करता है कि विशेष केक पांच बार से अधिक बेचा गया है।

एक बार हमारा लूप चलने के बाद, हम कंसोल पर "sold_more_than_five" डिक्शनरी प्रिंट करते हैं।

यह सुनिश्चित करने के लिए कि हमारा प्रोग्राम काम करता है, हमारा कोड चलाएँ:

Traceback (most recent call last):
  File "main.py", line 16, in <module>
	sold_more_than_five[c] = c["sold"]
TypeError: unhashable type: 'dict'

हमारा कोड एक त्रुटि देता है।

समाधान

हमारा कोड काम नहीं करता है क्योंकि हम किसी अन्य शब्दकोश का उपयोग करके एक शब्दकोश कुंजी बनाने का प्रयास कर रहे हैं।

"सी" का मूल्य हमारी "केक" सूची से एक शब्दकोश के बराबर है। इसका मतलब है कि जब हम "sold_more_than_five" शब्दकोश में कोई आइटम जोड़ने का प्रयास करते हैं, तो हम गलती से एक शब्दकोश को कुंजी के रूप में जोड़ने का प्रयास कर रहे हैं:

sold_more_than_five[c] = c["sold"]

जब हमारा "if" स्टेटमेंट "Carrot Cake" केक पर चलता है, तो हमारा कोड चलने की कोशिश करता है:

sold_more_than_five[{"name": "Carrot Cake", "sold": 7}] = 7

यह अमान्य है क्योंकि हम शब्दकोश में एक शब्दकोश को एक कुंजी के रूप में जोड़ने का प्रयास कर रहे हैं। हम अपने शब्दकोश कुंजी के नाम के रूप में c[“name”] का उपयोग करके इस समस्या को हल कर सकते हैं:

sold_more_than_five[c["name"]] = c["sold"]

इस संशोधित कोड के साथ हमारा कोड चलाएँ:

Carrot Cake has been sold more than five times.
Coconut and Lime Cake has been sold more than five times.

{'Carrot Cake': 7, 'Coconut and Lime Cake': 9}

हमारा कोड सफलतापूर्वक चलता है। अब हम प्रत्येक केक के नाम को शब्दकोश के बजाय कुंजी के रूप में उपयोग कर रहे हैं।

निष्कर्ष

"टाइप एरर:अनहैशेबल टाइप:'डिक्ट'" त्रुटि तब उठाई जाती है जब आप किसी डिक्शनरी में एक आइटम बनाने की कोशिश करते हैं जिसकी कुंजी एक अनहैशेबल ऑब्जेक्ट है। केवल अपरिवर्तनीय वस्तुएं जैसे स्ट्रिंग्स, टुपल्स और पूर्णांकों को एक शब्दकोश में एक कुंजी के रूप में उपयोग किया जा सकता है।

इस त्रुटि को हल करने के लिए, सुनिश्चित करें कि शब्दकोश में कोई आइटम बनाते समय आप केवल हैशेबल ऑब्जेक्ट्स का उपयोग करते हैं। अब आप एक पेशेवर डेवलपर की तरह इस सामान्य पायथन त्रुटि को हल करने के लिए तैयार हैं!


  1. पायथन में शब्दकोश डेटा प्रकार

    पायथन के शब्दकोश एक प्रकार की हैश तालिका प्रकार हैं। वे पर्ल में पाए जाने वाले सहयोगी सरणी या हैश की तरह काम करते हैं और इसमें कुंजी-मूल्य जोड़े होते हैं। एक शब्दकोश कुंजी लगभग किसी भी पायथन प्रकार की हो सकती है, लेकिन आमतौर पर संख्याएं या तार होते हैं। दूसरी ओर, मान किसी भी मनमाने ढंग से पायथन ऑब्ज

  1. पायथन में शब्दकोश के तरीके

    पायथन में कुछ डिक्शनरी विधियाँ हैं जो नीचे दी गई हैं - Sr.No विधि का नाम और विवरण 1 पायथन डिक्शनरी क्लियर () सभी आइटम साफ़ करें 2 पायथन डिक्शनरी कॉपी () शब्दकोश की प्रति 3 कीज़ से पायथन डिक्शनरी() दिए गए क्रम से शब्दकोश बनाता है 4 पायथन डिक्शनरी get() कुंजी का मान प्राप्त करें

  1. पायथन में TypeError अपवाद कैसे पकड़ें?

    TypeErrors गलत प्रकार की वस्तुओं के संयोजन, या किसी फ़ंक्शन को गलत प्रकार के ऑब्जेक्ट के साथ कॉल करने के कारण होते हैं। उदाहरण आयात systry :ny =Statue of Libertymy_list =[3, 4, 5, 8, 9] my_list + nyexcept TypeError को e:print eprint sys.exc_type के रूप में प्रिंट करें आउटपुट केवल सूची को जोड़ सकते ह