簡體   English   中英

不可散列的類型:字典中的“列表”

[英]Unhashable type: 'list' in dictionary

我編寫了一些代碼來從第二個字典中獲取新值並添加到新字典中。

這是兩個字典:

a = {armani: jeans, dolce: gabbana}
b = {jeans: robo, jobs: versace}

這是代碼: {k:b[v] for k,v in a.items() if v in b}

但是,我收到以下錯誤: unhashable type: 'list'我理解這可能是因為我的b[v]值類似於[[20], [30], [35]]

在過去的幾個小時里,我的頭一直發瘋。 我敢肯定這東西很小

它不是那么小。 在繼續您的過程之前,您需要了解一些概念。

字典使您可以使用鍵(例如字符串或整數)而不是索引(例如列表)來訪問其值,對嗎? 好吧,應該有一種機制來實現這一目標,這稱為哈希。

每次將key:value對放入字典中時,都會為該key計算一個哈希值。 對於不可變對象(創建后無法更改的對象,只能重新創建),對於相同的字符串或整數或其他不可變對象,哈希值始終相同,這就是字典使用鍵訪問其值的方式。

另一方面,可變對象不能被散列。 因此不適合用作字典中的鍵。 list就是其中之一。

如果需要,可以將列表轉換為元組,以將其用作字典中的鍵。

lst = [1, 2, 3]
tup = tuple(lst)

請記住,創建后不能更改元組的元素,例如;

tup[0] = 1

這就是為什么它是不變的。 如果您需要更改其值,則只能將其替換為另一個元組。

注意:如果要求將元組用於哈希(這會使它可變),則元組也不能包含列表作為元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM