不可损坏类型:“list”

2024-09-29 17:09:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dict(IDMapping),我正在查找它以获得一个值,然后使用它来查找另一个dict(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之前,我曾尝试将foodName转换为tuple,但结果是FALSE:

^{pr2}$

我肯定我在做一些傻事。谢谢大家。在


Tags: 代码researchgetfoodosdictcurdir
2条回答

这是因为IDMapping中的值是列表。不能使用列表作为字典的键(因为它是可变的)。因此,当您试图在defaultFood.get(myFoodKey)中使用列表时,它会抛出您看到的错误(Unhashable type:list)。在

您需要想出一些方法将myFoodKey从列表转换为字符串、整数或其他不可变类型。在

例如:

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

将对象列表转换为字符串列表,然后将它们连接在一起,使[4, 5]变成{},可以在字典中用作键。在

您需要访问列表中的元素:

print defaultFood.get(myFoodKey[0])

IDMapping.get(foodName) -> [45]所以[45][0] -> 45

如果您有一个反向映射,我建议将IDMapping的值存储为元组、int或string,具体取决于您要对它们做什么,并使defaultFood的键相同。在

相关问题 更多 >

    热门问题