python w3schools TypeError: unhashable টাইপ: 'dict'



python w3schools (1)

কোডটি এই টুকরাটি আমাকে একটি unhashable type: dict আমাকে সমাধানটি কী ব্যাখ্যা করতে পারে

negids = movie_reviews.fileids('neg')
def word_feats(words):
    return dict([(word, True) for word in words])

negfeats = [(word_feats(movie_reviews.words(fileids=[f])), 'neg') for f in negids]
stopset = set(stopwords.words('english'))

def stopword_filtered_word_feats(words):
    return dict([(word, True) for word in words if word not in stopset])

result=stopword_filtered_word_feats(negfeats)

আপনি অন্য dict বা একটি set একটি কী হিসেবে একটি dict ব্যবহার করার চেষ্টা করছেন। যে কাজগুলি হ্যাশেবল হতে হবে কারণ কাজ করে না। সাধারণ নিয়ম হিসাবে, শুধুমাত্র অপরিবর্তনীয় বস্তু (স্ট্রিং, ইন্টিজার, ভাসা, ফোজেনসেটস, অনুলিপিগুলির টুপল) হ্যাশেবল (যদিও ব্যতিক্রমগুলি সম্ভব)। সুতরাং এই কাজ করে না:

>>> dict_key = {"a": "b"}
>>> some_dict[dict_key] = True
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'

একটি শব্দ হিসাবে একটি dict ব্যবহার করার জন্য আপনাকে এটি প্রথমে হ্যাশ করা যেতে পারে এমন কিছুতে পরিণত করতে হবে। যদি আপনি কী হিসাবে চাবি ব্যবহার করতে চান কেবলমাত্র অপরিবর্তনীয় মান ধারণ করে তবে আপনি এটির মতো একটি হ্যাশেবল উপস্থাপনা তৈরি করতে পারেন:

>>> key = frozenset(dict_key.items())

এখন আপনি একটি শব্দ বা set একটি key হিসাবে key ব্যবহার করতে পারেন:

>>> some_dict[key] = True
>>> some_dict
{frozenset([('a', 'b')]): True}

অবশ্যই যখন আপনি একটি নির্দেশ ব্যবহার করে কিছু সন্ধান করতে চান তখন ব্যায়ামটি পুনরাবৃত্তি করতে হবে:

>>> some_dict[dict_key]                     # Doesn't work
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>> some_dict[frozenset(dict_key.items())]  # Works
True

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

def freeze(d):
    if isinstance(d, dict):
        return frozenset((key, freeze(value)) for key, value in d.items())
    elif isinstance(d, list):
        return tuple(freeze(value) for value in d)
    return d




python