亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

TypeError:無法散列的類型:'dict'

TypeError:無法散列的類型:'dict'

料青山看我應如是 2019-11-30 14:16:14
這段代碼給我一個錯誤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)
查看完整描述

3 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

您正在嘗試將a dict用作另一個dict或a 中的鍵set。那是行不通的,因為密鑰必須是可哈希的。通常,只有不可變的對象(字符串,整數,浮點數,frozensets,不可變的元組)才是可哈?;模ūM管可能有例外)。因此,這不起作用:


>>> dict_key = {"a": "b"}

>>> some_dict[dict_key] = True

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: unhashable type: 'dict'

要將字典用作鍵,您需要將其轉換為可能首先進行哈希處理的東西。如果要用作鍵的字典僅由不可變值組成,則可以像這樣創建可散列的表示形式:


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

現在,您可以key在dict或中用作鍵set:


>>> 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

如果dict您希望用作鍵的值本身就是字典和/或列表,則需要遞歸“凍結”預期鍵。這是一個起點:


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


查看完整回答
反對 回復 2019-11-30
?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

可能的解決方案可能是使用JSON dumps()方法,因此您可以將字典轉換為字符串-


import json

a={"a":10, "b":20}

b={"b":20, "a":10}

c = [json.dumps(a), json.dump(b)]

set(c)

json.dump(a) in c

輸出-


set(['{"a": 10, "b": 20}'])

True


查看完整回答
反對 回復 2019-11-30
  • 3 回答
  • 0 關注
  • 1148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號