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

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

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

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

लेखन त्रुटि:धोने योग्य प्रकार:'स्लाइस'

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

निम्नलिखित कार्यक्रम पर विचार करें:

news_sites = ["New York Times", "Washington Post", "CNN"]
print(news_sites[:2])

यह कोड हमारी "news_sites" सूची में पहले दो मानों को पुनः प्राप्त करता है और उन्हें कंसोल पर प्रिंट करता है। हमारा कोड रिटर्न:['न्यूयॉर्क टाइम्स', 'वाशिंगटन पोस्ट']।

यह काटने का एक उदाहरण है। आप सूची से दो ऑब्जेक्ट प्राप्त कर रहे हैं। एक बृहदान्त्र और एक सूचकांक मान निर्दिष्ट करके, आप पायथन को बता रहे हैं कि किन वस्तुओं को पुनः प्राप्त करना है।

शब्दकोशों को सूची की तरह काटा नहीं जा सकता। शब्दकोशों में कोई अनुक्रमणिका संख्या नहीं होती है और इसलिए यह वाक्य-विन्यास लागू नहीं होता है।

लेखन त्रुटि:धोने योग्य प्रकार:'स्लाइस'

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

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

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

keyboard = {
	  "name": "Huntsman Mini",
	  "brand": "Razer",
	  "price": 119.99,
	  "switch_type": "Razer Switches",
}

प्रोग्राम कीबोर्ड के नाम, उसकी कीमत, कीबोर्ड के ब्रांड और कीबोर्ड द्वारा उपयोग किए जाने वाले स्विच प्रकार के बारे में जानकारी संग्रहीत करता है। आप केवल दिखाना चाहते हैं:कीबोर्ड का नाम, कीबोर्ड का ब्रांड और उसकी कीमत।

ऐसा करने के लिए, हमारे शब्दकोश में पहली तीन वस्तुओं को पुनः प्राप्त करने के लिए स्लाइसिंग का उपयोग करें। ये आइटम कीबोर्ड का नाम, ब्रांड और कीमत हैं:

show_to_customer = keyboard[:3]

यह कोड शब्दकोश में पहले तीन आइटम पुनर्प्राप्त करता है। इसके बाद, इस सूची में पुनरावृति करने के लिए लूप के लिए उपयोग करें और प्रत्येक आइटम को कंसोल पर प्रिंट करें:

for s in show_to_customer:
	     print(s[1])

आप “show_to_customer” चर में प्रत्येक रिकॉर्ड से मान प्राप्त करने के लिए अनुक्रमण का उपयोग करते हैं। फिर आप उस मान को print() . का उपयोग करके कंसोल पर प्रिंट करते हैं बयान।

आइए कोड चलाएं और देखें कि क्या होता है:

Traceback (most recent call last):
  File "main.py", line 8, in <module>
	     show_to_customer = keyboard[:3]
TypeError: unhashable type: 'slice'

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

समाधान

सूचियों के विपरीत, शब्दकोशों को काटा नहीं जा सकता। आप स्लाइसिंग का उपयोग करके शब्दकोश में कोई भी आइटम पुनर्प्राप्त नहीं कर सकते क्योंकि शब्दकोशों में अनुक्रमणिका संख्या नहीं होती है। डेटा को की-वैल्यू पेयर में स्टोर किया जाता है। क्योंकि शब्दकोशों को काटा नहीं जा सकता, for पहले से लूप उचित नहीं है।

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

कोड को हल करने के लिए, आइए प्रत्येक मान को व्यक्तिगत रूप से एक्सेस करें जिसे आप कंसोल पर प्रदर्शित करना चाहते हैं:

keyboard = {
	  "name": "Huntsman Mini",
	  "brand": "Razer",
	  "price": 119.99,
	  "switch_type": "Razer Switches",
}

print("Name: " + keyboard["name"])
print("Brand: " + keyboard["brand"])
print("Price: $" + str(keyboard["price"]))

प्रत्येक प्रिंट () कथन शब्दकोश से भिन्न मान को संदर्भित करता है। पहला प्रिंट स्टेटमेंट कंसोल पर "नाम:" लेबल प्रिंट करता है, उसके बाद शब्दकोश में "नाम" का मान होता है। दूसरे और तीसरे स्टेटमेंट क्रमशः कंसोल पर "ब्रांड" और "कीमत" के मूल्य को प्रिंट करते हैं।

आप str() . का उपयोग करके "कीमत" मान को एक स्ट्रिंग में कनवर्ट करते हैं संयोजन ऑपरेटर (+) का उपयोग करके इसे "मूल्य:$" लेबल के साथ संयोजित करने की विधि।

आइए अपना नया कार्यक्रम चलाते हैं:

Name: Huntsman Mini
Brand: Razer
Price: $119.99

कोड उन तीन सूचनाओं को सफलतापूर्वक प्रिंट करता है जिन्हें आप कंसोल पर प्रदर्शित करना चाहते थे। उपयोगकर्ता कीबोर्ड का नाम, ब्रांड और कीमत देख सकता है।

निष्कर्ष

जब आप स्लाइसिंग सिंटैक्स का उपयोग करके किसी डिक्शनरी से आइटम एक्सेस करने का प्रयास करते हैं तो "टाइप एरर:अनहैशेबल टाइप:'स्लाइस'" त्रुटि उत्पन्न होती है। इस त्रुटि को हल करने के लिए, सुनिश्चित करें कि आप उन आइटम्स को संदर्भित करते हैं जिन्हें आप सीधे किसी शब्दकोश से एक्सेस करना चाहते हैं।

अब आपके पास एक विशेषज्ञ की तरह इस त्रुटि को हल करने के लिए आवश्यक ज्ञान है!


  1. पायथन में टुपल डेटा प्रकार

    एक टपल एक अन्य अनुक्रम डेटा प्रकार है जो सूची के समान है। एक टपल में अल्पविराम द्वारा अलग किए गए कई मान होते हैं। सूचियों के विपरीत, हालांकि, टुपल्स कोष्ठक में संलग्न हैं। उदाहरण सूचियों और टुपल्स के बीच मुख्य अंतर हैं:सूचियाँ कोष्ठक ( [ ] ) में संलग्न हैं और उनके तत्वों और आकार को बदला जा सकता है,

  1. पायथन में स्ट्रिंग डेटा प्रकार

    पायथन में स्ट्रिंग्स को उद्धरण चिह्नों में दर्शाए गए वर्णों के एक सन्निहित सेट के रूप में पहचाना जाता है। पायथन सिंगल या डबल कोट्स के जोड़े के लिए अनुमति देता है। स्ट्रिंग की शुरुआत में 0 से शुरू होने वाले इंडेक्स के साथ स्लाइस ऑपरेटर ([ ] और [:] ) का उपयोग करके स्ट्रिंग्स के सबसेट को लिया जा सकता ह

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

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