我有一个清单:v = [1,2,2,3]
。我想用这个列表作为关键。我可以“手动”完成:
x = {}
x[1,2,2,3] = 7
但是
x [v] = 7
不起作用。做我需要做的最简单的方法是什么?
ADDED
我想像这样的解决方案:
x[open(v)] = 7
答案 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