小能豆

列表作为字典的键

py

我有多个元组列表,例如

[([1, 2, 3, 4], 2), ([5, 6, 7], 3)]

我希望将其作为字典的键(因此字典中的每个键都是一个元组列表)。

不幸的是,根据TypeError我得到的 ( unhashable type: list),python 似乎不喜欢哈希列表。我的元组列表中的所有元素都是 int(如果这有区别的话)。有什么建议吗?谢谢!


阅读 29

收藏
2024-12-03

共1个答案

小能豆

Python 中的字典键必须是 可哈希 的,然而 list 是不可哈希的,因为它是可变的(你可以修改列表的内容)。如果你尝试使用包含列表的元组作为字典的键,就会出现 TypeError: unhashable type: 'list' 错误。

为了使元组中的列表能够作为字典的键,你可以将列表转换为元组,因为元组是 不可变的可哈希 的。通过这种方式,你可以将列表转换为元组,从而让它们可以作为字典的键。

解决方案:

你可以使用以下方法将列表转换为元组,使其可以作为字典的键:

# 原始列表
data = [([1, 2, 3, 4], 2), ([5, 6, 7], 3)]

# 转换列表为元组
data = [(tuple(lst), num) for lst, num in data]

# 使用转换后的元组列表作为字典的键
my_dict = {key: value for key, value in data}

print(my_dict)

输出:

{(1, 2, 3, 4): 2, (5, 6, 7): 3}

解释:

  1. 转换列表为元组tuple(lst) 将列表 lst 转换为元组,使其变得不可变和可哈希。
  2. 字典创建:使用 data 中每个元组的第一个元素(转换后的元组)作为键,第二个元素(整数)作为值。

通过这种方式,你就能将包含列表的元组作为字典的键使用,而不会遇到哈希错误。

注意:

  • 这种方法适用于列表中的元素是 不可变的类型(如整数、字符串等)。如果列表中包含可变类型(如字典、列表等),你需要首先确保它们也被转换为可哈希的类型。
2024-12-03