কম্পিউটার

Python TypeError:unhashable type:'slice' Solution

একটি পাইথন অভিধানের মান একটি তালিকার মত কাটা যাবে না। এর কারণ অভিধানে কাস্টম কী মান থাকতে পারে। তারা শূন্য থেকে সূচিত হয় না. আপনি যদি একটি অভিধানকে একটি তালিকার মতো করে টুকরো টুকরো করার চেষ্টা করেন, তাহলে আপনি "TypeError:unhashable type:'slice'" ত্রুটির সম্মুখীন হবেন।

এই নির্দেশিকাটি আলোচনা করে যে এই ত্রুটির অর্থ কী এবং কেন আপনি এটি আপনার কোডে দেখতে পাচ্ছেন৷ এটি আপনাকে সমাধান করতে সাহায্য করার জন্য এই ত্রুটির একটি উদাহরণ নিয়ে আলোচনা করে৷

TypeError:unhashable type:'slice'

একটি স্লাইস হল একটি অনুক্রমের একটি উপসেট যেমন একটি স্ট্রিং, একটি তালিকা বা একটি টিপল। নামটি একটি স্লাইসের উদ্দেশ্য তুলে দেয়:এটি একটি অনুক্রমের "একটি টুকরা"।

নিম্নলিখিত প্রোগ্রাম বিবেচনা করুন:

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

এই কোডটি আমাদের "news_sites" তালিকার প্রথম দুটি মান পুনরুদ্ধার করে এবং সেগুলিকে কনসোলে প্রিন্ট করে। আমাদের কোড ফিরে আসে:['নিউ ইয়র্ক টাইমস', 'ওয়াশিংটন পোস্ট']।

এটি স্লাইসিংয়ের একটি উদাহরণ। আপনি তালিকা থেকে দুটি বস্তু পুনরুদ্ধার করছেন। একটি কোলন এবং একটি সূচক মান নির্দিষ্ট করে, আপনি পাইথনকে বলছেন কোন বস্তুগুলি পুনরুদ্ধার করতে হবে।

অভিধানগুলিকে তালিকার মতো কাটা যাবে না। অভিধানের কোনো সূচক সংখ্যা নেই এবং তাই এই সিনট্যাক্স প্রযোজ্য নয়।

TypeError:unhashable type:'slice'

একটি প্রোগ্রাম তৈরি করুন যা একটি কম্পিউটার হার্ডওয়্যারের দোকানে বিক্রয়ের জন্য একটি কীবোর্ড সম্পর্কে তথ্য প্রদর্শন করে৷ শুরু করতে, একটি কীবোর্ড সম্পর্কে ডেটা সহ একটি অভিধান সংজ্ঞায়িত করুন:

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

কোডটি সফলভাবে তিনটি তথ্য প্রিন্ট করে যা আপনি কনসোলে প্রদর্শন করতে চেয়েছিলেন। ব্যবহারকারী একটি কীবোর্ডের নাম, ব্র্যান্ড এবং মূল্য দেখতে পারেন৷

উপসংহার

"TypeError:unhashable type:'slice'" ত্রুটি উত্থাপিত হয় যখন আপনি স্লাইসিং সিনট্যাক্স ব্যবহার করে অভিধান থেকে আইটেমগুলি অ্যাক্সেস করার চেষ্টা করেন। এই ত্রুটিটি সমাধান করতে, নিশ্চিত করুন যে আপনি সরাসরি একটি অভিধান থেকে অ্যাক্সেস করতে চান এমন আইটেমগুলি উল্লেখ করুন৷

একজন বিশেষজ্ঞের মতো এই ত্রুটিটি সমাধান করার জন্য আপনার প্রয়োজনীয় জ্ঞান এখন আপনার আছে!


  1. পাইথন কিভাবে ফাংশন নাম পেতে?

  2. পাইথনে Tuple ডেটা টাইপ

  3. পাইথনে স্ট্রিং ডেটা টাইপ

  4. পাইথনে TypeError ব্যতিক্রম কিভাবে ধরবেন?