3 回答

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

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
添加回答
舉報