我希望创建一个可以通过列表索引的字典。例如,我的字典应该如下所示:
D = {[1,2,3]:1, [2,3]:3}
有人知道怎么做吗?如果我只是输入 D([1,2,3]) = 1
,它就会返回错误。
D = {[1,2,3]:1, [2,3]:3}
有人知道怎么做吗?如果我只是输入 D([1,2,3]) = 1
,它就会返回错误。
字典的键必须是可散列的,而列表不是因为它们是可变的。你可以在创建后更改列表。试想一下,当用作键的数据发生更改时,尝试保持字典会有多么棘手;这没有任何意义。想象一下以下情景:
>>> 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
d = {(1, 2): 3}; print(d[(2, 1)])
时,我遇到了一个关键错误。你应该再检查一下。 - rohithpr字典的键只能是可哈希对象。 如果你想把列表作为键,可以将其转换为元组。
>>>d={}
>>>a = tuple((1,2))
>>>a
(1, 2)
>>>d[a] = 3
>>>print d
{(1, 2): 3}
d = {repr([1,2,3]): 'value'}
{'[1, 2, 3]': 'value'}
(...)
,但你应该使用[...]
。D[1, 2, 3] = 1
应该可以正常工作。 - Mike Graham