我想创建一个按列表索引的字典。例如,我的字典应该如下:
D = {[1,2,3]:1, [2,3]:3}
任何人都知道如何做到这一点?如果我只输入D([1,2,3]) = 1
,则会返回错误。
答案 0 :(得分:19)
dict键必须是 hashable ,这些列表不是因为它们是 mutable 。您可以在完成后更改列表。想想当用作密钥的数据发生变化时尝试保留字典是多么棘手;它没有任何意义。想象一下这个场景
>>> foo = [1, 2]
>>> bar = {foo: 3}
>>> foo.append(4)
您将看到为什么Python不会尝试将列表作为键支持。
最明显的解决方案是使用元组而不是列表作为键。
>>> d = {[1, 2, 3]: 1, [2, 3]: 3}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> d = {(1, 2, 3): 1, (2, 3): 3}
>>> d
{(2, 3): 3, (1, 2, 3): 1}
>>> d[2, 3]
3
答案 1 :(得分:2)
字典键只能是可哈希的对象。 如果您希望将列表的内容作为键,则可以将列表转换为元组。
>>>d={}
>>>a = tuple((1,2))
>>>a
(1, 2)
>>>d[a] = 3
>>>print d
{(1, 2): 3}
答案 2 :(得分:1)
d = {repr([1,2,3]): 'value'}
{'[1, 2, 3]': 'value'}
正如其他人(see also here)所解释的那样,您无法直接使用列表。但是,如果你真的想使用你的列表,你可以使用它的字符串表示。