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

14 投票
3 回答
8474 浏览
提问于 2025-04-15 21:47

我想创建一个字典,这个字典的索引是列表。比如说,我希望我的字典看起来像这样:

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

有没有人知道怎么做到这一点?如果我直接输入 D([1,2,3]) = 1,就会报错。

3 个回答

1
d = {repr([1,2,3]): 'value'}

{'[1, 2, 3]': 'value'}

正如其他人所解释的 (这里也可以查看),你不能直接把列表用作字典的键。不过,如果你真的想用你的列表,可以使用它的字符串表示形式。

2

字典的键只能是可以哈希的对象。也就是说,字典的键必须是一些可以被唯一识别的东西。如果你想把列表的内容当作键使用,可以把这个列表转换成一个元组。

>>>d={}
>>>a = tuple((1,2))
>>>a
(1, 2)
>>>d[a] = 3
>>>print d
{(1, 2): 3}
20

字典的键必须是可哈希的,而列表不是,因为列表是可变的。这意味着你可以在创建列表后对它进行修改。想象一下,如果用作键的数据发生变化,保持字典的完整性会有多麻烦;这根本没有意义。想象一下这个场景:

>>> 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

撰写回答