কম্পিউটার

Python TypeError:unhashable type:'dict' সমাধান

পাইথন ভাষা একটি অভিধানে কী হিসাবে ব্যবহার করা যেতে পারে সে সম্পর্কে নির্দিষ্ট। একটি পাইথন অভিধানে, সমস্ত কী হ্যাশেবল হতে হবে।

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

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

TypeError:unhashable type:'dict'

অভিধান দুটি অংশ নিয়ে গঠিত:কী এবং মান। কী হল শনাক্তকারী যা একটি মানের সাথে আবদ্ধ। যখন আপনি একটি কী উল্লেখ করেন, আপনি সেই কীটির সাথে সম্পর্কিত মানটি পুনরুদ্ধার করতে সক্ষম হবেন।

শুধুমাত্র হ্যাশেবল বস্তু একটি অভিধানে কী হতে পারে। অপরিবর্তনীয় বস্তু যেমন স্ট্রিং, পূর্ণসংখ্যা, টিপলস এবং ফ্রোজেনসেট কিছু ব্যতিক্রম ছাড়া হ্যাশেবল। ডিকশনারী, তাই অভিধানে কী হিসাবে ব্যবহার করা যাবে না।

একটি অভিধানে একটি আইটেম যোগ করতে, আপনাকে অবশ্যই একটি বৈধ হ্যাশেবল কী নির্দিষ্ট করতে হবে৷ উদাহরণস্বরূপ, "নাম" একটি বৈধ কী, কিন্তু { "নাম":"পরীক্ষা" } নয়৷

একটি উদাহরণ দৃশ্য

এখানে, আমরা একটি প্রোগ্রাম লিখি যা একটি অভিধান থেকে অন্য অভিধানে একটি বেকারিতে পাঁচবারের বেশি বিক্রি হওয়া সমস্ত কেক যোগ করে।

কেকের একটি তালিকা ঘোষণা করে শুরু করুন যাতে প্রতিটি কেক সম্পর্কে অভিধান রয়েছে। আমরা এমন একটি অভিধানও সংজ্ঞায়িত করি যেখানে আমরা পাঁচবারের বেশি বিক্রি হওয়া কেকগুলি সংরক্ষণ করতে পারি৷

81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷

গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় ব্যয় করেছে।

কেক =[ {"name":"Black Forest Gateau", "sold":3},{"name":"Carrot Cake", "sold":7},{"name":"নারকেল এবং চুন কেক", "বিক্রীত":9}]sold_more_than_five ={}

আমাদের "কেক" তালিকায় তিনটি অভিধান রয়েছে। প্রতিটি অভিধানে দুটি কী এবং মান রয়েছে। মূল নামগুলি হল "কেক" এবং "বিক্রীত"।

এখন, আমরা একটি লুপ লিখি যা আমাদের কেকের তালিকার মধ্য দিয়ে যায় এবং পাঁচবারের বেশি বিক্রি হয়েছে এমনগুলি খুঁজে পাই। এই কেকগুলি "sold_more_than_five" অভিধানে যোগ করা হবে:

<প্রে>কেকের জন্য c:যদি c["sold"]> 5:sell_more_than_five[c] =c["sold"] print(c["name"] + " পাঁচবারের বেশি বিক্রি হয়েছে।")প্রিন্ট (sold_more_than_five)

আমাদের ফর লুপে, আমরা প্রতিটি অভিধানে "বিক্রীত" এর মান 5-এর বেশি কিনা তা তুলনা করি। যদি তা হয়, তাহলে সেই আইটেমটি আমাদের "বিক্রীত_আরো_পাঁচ" অভিধানে যোগ করা হয়। তারপরে, কনসোলে একটি বার্তা প্রিন্ট করা হয় যাতে ব্যবহারকারীকে জানানো হয় যে নির্দিষ্ট কেকটি পাঁচবারের বেশি বিক্রি হয়েছে।

একবার আমাদের লুপ চলে গেলে, আমরা কনসোলে "sold_more_than_five" অভিধান প্রিন্ট করি।

আমাদের প্রোগ্রাম কাজ করে তা নিশ্চিত করতে আমাদের কোড চালান:

ট্রেসব্যাক (সর্বশেষ সর্বশেষ কল):ফাইল "main.py", লাইন 16,  এ sold_more_than_five[c] =c["sold"]TypeError:unhashable type:'dict'

আমাদের কোড একটি ত্রুটি প্রদান করে৷

সমাধান

আমাদের কোড কাজ করে না কারণ আমরা অন্য অভিধান ব্যবহার করে একটি অভিধান কী তৈরি করার চেষ্টা করছি।

"c" এর মান আমাদের "কেক" তালিকা থেকে একটি অভিধানের সমান। এর মানে হল যখন আমরা "sold_more_than_five" অভিধানে একটি আইটেম যোগ করার চেষ্টা করি, আমরা দুর্ঘটনাক্রমে একটি কী হিসাবে একটি অভিধান যোগ করার চেষ্টা করছি:

sold_more_than_five[c] =c["sold"]

যখন আমাদের "যদি" বিবৃতি "গাজর কেক" কেকে চালানো হয়, তখন আমাদের কোড চালানোর চেষ্টা করে:

sold_more_than_five[{"name":"গাজরের কেক", "sold":7}] =7

এটি অবৈধ কারণ আমরা একটি অভিধানে একটি কী হিসাবে একটি অভিধান যোগ করার চেষ্টা করছি৷ আমরা আমাদের অভিধান কী-এর নাম হিসেবে c[“name”] ব্যবহার করে এই সমস্যার সমাধান করতে পারি:

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

এই সংশোধিত কোড দিয়ে আমাদের কোড চালান:

গাজরের পিঠা পাঁচবারের বেশি বিক্রি হয়েছে। নারকেল এবং চুনের পিঠা পাঁচবারের বেশি বিক্রি হয়েছে। 

আমাদের কোড সফলভাবে সঞ্চালিত হয়. আমরা এখন অভিধানের পরিবর্তে প্রতিটি কেকের নাম একটি কী হিসাবে ব্যবহার করছি৷

উপসংহার

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

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


  1. পাইথন - অভিধান খালি কিনা তা পরীক্ষা করুন

  2. পাইথনে অভিধান ডেটা টাইপ

  3. পাইথনে অভিধান পদ্ধতি

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