我有一个清单:v = [1,2,2,3]
。我想将此列表用作键。我可以“手动”完成:
x = {}
x[1,2,2,3] = 7
但
x[v] = 7
不起作用。做我需要做的最简单的方法是什么?
添加
我把解决方案想象成这样:
x[open(v)] = 7
我有一个清单:v = [1,2,2,3]
。我想将此列表用作键。我可以“手动”完成:
x = {}
x[1,2,2,3] = 7
但
x[v] = 7
不起作用。做我需要做的最简单的方法是什么?
添加
我把解决方案想象成这样:
x[open(v)] = 7
问题是键必须是不可变的,而列表不是。然而,元组是。
只需转换v
为元组:
x[tuple(v)] = 7
说详细点,上面和写的一样
x[1,2,2,3] = 7
后者是
x[(1,2,2,3)] = 7
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
字典键必须是可散列的。列表不是可散列的,但元组是。(对象的哈希值在对象的生命周期内永远不会改变。此外,两个比较相等的可哈希对象必须具有相同的哈希。由于列表是可变的,满足这两个条件的唯一方法是让所有列表都返回相同的哈希值。Python 不允许这样做并破坏哈希的目的,而是使所有可变容器都不可哈希。)
x[tuple(v)]
x[1,2,2,3]
之所以有效,是因为使用逗号而不是括号表示元组:
In [78]: 1,2,2,3
Out[78]: (1, 2, 2, 3)