কম্পিউটার

Python TypeError:unhashable type:'list' Solution

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

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

TypeError:unhashable type:'list'

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

যদিও মানগুলি তালিকা থেকে স্ট্রিং পর্যন্ত যেকোন ডেটা টাইপের হতে পারে, শুধুমাত্র হ্যাশেবল অবজেক্টগুলি কী হিসাবে গ্রহণযোগ্য। Hashable অবজেক্ট হল একটি হ্যাশ মান সহ বস্তু যা সময়ের সাথে পরিবর্তিত হয় না। হ্যাশেবল অবজেক্টের উদাহরণ হল টিপল এবং স্ট্রিং।

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

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

আসুন একটি প্রোগ্রাম তৈরি করি যা শিক্ষার্থীদের একটি তালিকা তৈরি করে যাদের গড় গ্রেড 75-এর বেশি। এই তালিকায় প্রতিটি শিক্ষার্থী এবং তাদের গ্রেডের অভিধান রেকর্ড থাকবে। এই অভিধানটি তৈরি করতে, আমরা একটি অভিধান থেকে একটি স্কুলের সমস্ত ছাত্রদের তালিকা এবং তাদের গ্রেড নিয়ে কাজ করব৷

আসুন শিক্ষার্থীদের একটি তালিকা এবং আমাদের সেরা শিক্ষার্থীদের জন্য একটি অভিধান সংজ্ঞায়িত করে শুরু করি:

ছাত্ররা =[ { "নাম":"লিন্ডা", "গ্রেড":[84, 82, 65] }, { "নাম":"আলেক্স", "গ্রেড":[67, 68, 83] }, { "নাম":"হলি", "গ্রেড":[৭২, ৭৪, ৮১] }]শীর্ষ_ছাত্র ={}

"ছাত্র" তালিকার প্রতিটি মান একটি অভিধান। প্রতিটি অভিধানে দুটি কী রয়েছে:নাম এবং গ্রেড। আমরা "টপ_স্টুডেন্টস" নামে একটি অভিধান সংজ্ঞায়িত করেছি যেটিতে আমাদের শীর্ষ ছাত্রদের সম্পর্কে তথ্য থাকবে।

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

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

এখন যেহেতু আমরা এই অভিধানটি সংজ্ঞায়িত করেছি, আমরা একটি লুপ ব্যবহার করি যাদের গড় গ্রেড 75-এর বেশি শিক্ষার্থীদের ফিল্টার করতে এবং তাদের আমাদের নতুন অভিধানে যুক্ত করি:

শিক্ষার্থীদের জন্য:গড় =যোগফল(গুলি["গ্রেড"]) / লেন(গুলি["গ্রেড"]) গড় হলে> 75:শীর্ষ_ছাত্র[গুলি["গ্রেড"]] =গুলি["নাম"] 

লুপের প্রতিটি পুনরাবৃত্তিতে, আমরা একজন শিক্ষার্থীর অর্জন করা সমস্ত গ্রেডের গড় গণনা করি। আমরা সমস্ত গ্রেডের মোট কতগুলি গ্রেড রেকর্ড করা হয়েছে তার দ্বারা ভাগ করে এটি করি।

এরপরে, সেই গড় 75-এর বেশি হলে আমরা পরীক্ষা করি। যদি তা হয়, তাহলে আমরা একজন ছাত্রের নাম এবং তাদের গ্রেড সহ top_students অভিধানে একটি নতুন এন্ট্রি তৈরি করি।

অবশেষে, আমরা কনসোলে top_students অভিধান প্রিন্ট করি যাতে আমরা 75-এর উপরে গড় গ্রেড পাওয়া সমস্ত শিক্ষার্থীকে দেখতে পাই:

প্রিন্ট(টপ_স্টুডেন্ট)

আমাদের কোড চালান এবং দেখুন কি হয়:

ট্রেসব্যাক (সর্বশেষ সাম্প্রতিক কল):ফাইল "main.py", লাইন 11,  top_students[s["grades"]] =s["name"]TypeError:unhashable type:'list' 

আমাদের কোড সফলভাবে কার্যকর করতে ব্যর্থ হয়৷

সমাধান

দোভাষী 11 লাইনে না পৌঁছানো পর্যন্ত আমাদের কোড কাজ করে। এই লাইনে, আমাদের কোড বলে:

টপ_স্টুডেন্ট[s["গ্রেড"]] =s["নাম"]

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

{ [84, 82, 65]:"লিন্ডা" }

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

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

টপ_স্টুডেন্ট[s["নাম"]] =s["গ্রেড"]

আমরা গ্রেডের তালিকাকে কী হিসেবে না রেখে মান হিসেবে বরাদ্দ করেছি। অভিধানে ছাত্রের নামই মুখ্য। আমাদের কোড রান করা যাক:

{'লিন্ডা':[84, 82, 65], 'হলি':[72, 74, 81]}

আমাদের কোড সফলভাবে সেরা পারফরম্যান্সকারী শিক্ষার্থীদের সম্পর্কে তথ্য সহ একটি অভিধান তৈরি করে। যে কোনো শিক্ষার্থী যার শেষ তিনটি পরীক্ষায় গড় গ্রেড 75-এর বেশি তাকে অভিধানে যোগ করা হয়েছে।

আমাদের অভিধান নিম্নরূপ ভাঙ্গে:

  • কী:লিন্ডা, হলি
  • মান:[84, 82, 65], [72, 74, 81]

যেহেতু আমরা এখন আমাদের কী নামের স্ট্রিংগুলি বরাদ্দ করছি, আমাদের কোড কাজ করে৷

উপসংহার

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

এখন আপনি পেশাদার কোডারের মতো এই ত্রুটিটি সমাধান করতে প্রস্তুত!


  1. পাইথন ডিকশনারি কম্প্রিহেনশন

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

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

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