在python中创建一个由列表索引的字典

时间:2010-04-19 21:59:06

标签: python dictionary

我想创建一个按列表索引的字典。例如,我的字典应该如下:

D = {[1,2,3]:1, [2,3]:3}

任何人都知道如何做到这一点?如果我只输入D([1,2,3]) = 1,则会返回错误。

3 个答案:

答案 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)所解释的那样,您无法直接使用列表。但是,如果你真的想使用你的列表,你可以使用它的字符串表示。