0

我有一个清单:v = [1,2,2,3]。我想将此列表用作键。我可以“手动”完成:

x = {}
x[1,2,2,3] = 7

x[v] = 7

不起作用。做我需要做的最简单的方法是什么?

添加

我把解决方案想象成这样:

x[open(v)] = 7
4

3 回答 3

7

问题是键必须是不可变的,而列表不是。然而,元组是。

只需转换v为元组:

x[tuple(v)] = 7

说详细点,上面和写的一样

x[1,2,2,3] = 7

后者是

x[(1,2,2,3)] = 7
于 2011-10-05T15:57:21.543 回答
2

Python 有两种相似的数据结构用于存储值列表。list是可变版本:它的值可以改变。

x = [1, 2, 2, 3]
x = list((1, 2, 3, 4))

tuple是不可变的版本。一旦创建,它的值就不能被修改。

x = 1, 2, 2, 3
x = (1, 2, 2, 3)
x = tuple((1, 2, 2, 3))

Python 不允许您使用可变类型作为字典键,因此您只需要将元组创建到列表中:

x[tuple(v)] = 7
于 2011-10-05T15:58:45.613 回答
2

字典键必须是可散列的。列表不是可散列的,但元组是。(对象的哈希值在对象的生命周期内永远不会改变。此外,两个比较相等的可哈希对象必须具有相同的哈希。由于列表是可变的,满足这两个条件的唯一方法是让所有列表都返回相同的哈希值。Python 不允许这样做并破坏哈希的目的,而是使所有可变容器都不可哈希。)

x[tuple(v)]

x[1,2,2,3]之所以有效,是因为使用逗号而不是括号表示元组:

In [78]: 1,2,2,3
Out[78]: (1, 2, 2, 3)
于 2011-10-05T15:57:48.017 回答