如何在Python中使用索引作为键?

时间:2011-10-05 15:56:14

标签: python list dictionary key assign

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

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

但是

x [v] = 7

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

ADDED

我想像这样的解决方案:

x[open(v)] = 7

3 个答案:

答案 0 :(得分:7)

问题是密钥必须是不可变的,哪些列表不是。然而,元组是。

只需将v转换为元组:

x[tuple(v)] = 7

详细说明,上述内容与写作相同

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

而后者是

的句法变体
x[(1,2,2,3)] = 7

答案 1 :(得分:2)

Dict keys must be hashable。列表不可清除,但元组是。 (对象生命周期内对象should never change的哈希值。此外,两个比较相等的可哈希对象必须具有相同的哈希。由于列表是可变的,满足这两个条件的唯一方法是使所有list返回相同的哈希值。而不是允许这个并且破坏哈希的目的,Python使所有可变容器都不可用。)

x[tuple(v)]

x[1,2,2,3]有效,因为元组是indicated by the use of commas,而不是括号:

In [78]: 1,2,2,3
Out[78]: (1, 2, 2, 3)

答案 2 :(得分: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