簡體   English   中英

無法散列的類型:“列表”

[英]Unhashable Type: 'list'

我要查找一個字典(IDMapping)以獲取一個值,然后用它來查找另一個字典(defaultFood)。 我有麻煩了

我的代碼當前如下所示:

homePSDpath = os.curdir
foodName = re.search(r'([a-zA-Z_]+)\\food', homeFoodpath).group(1)
foodName = foodName.decode("utf-8")
myFoodKey = IDMapping.get(foodName)
print defaultFood.get(myFoodKey)

結果是:TypeError:無法散列的類型:'list'

我嘗試過將foodName轉換為元組,然后再使用它來查找IDMapping,但是結果為FALSE:

myFoodKey = tuple(myFoodKey)

我確定我在這里做些愚蠢的事情。 感謝大家。

您需要訪問列表中的元素:

print defaultFood.get(myFoodKey[0])

IDMapping.get(foodName) -> [45]如此[45][0] -> 45

如果您有反向映射,建議您將IDMapping的值存儲為元組,整數或字符串,具體取決於您要對它們進行什么操作,並使defaultFood的鍵相同。

這是因為IDMapping中的值是列表。 您不能將列表用作字典的鍵(因為它是可變的)。 因此,當您嘗試在defaultFood.get(myFoodKey)使用列表時,它會引發您所看到的錯誤(Unhashable類型:list)。

您需要想出一些方法將myFoodKey從列表轉換為字符串或整數或其他一些非可變類型。

例如:

myFoodKey = "".join([str(x) for x in myFoodKey])

會將對象列表轉換為字符串列表,然后將它們連接在一起,使得[4, 5]變為"45" ,您可以將其用作字典中的鍵。

暫無
暫無

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

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