-3

可能重复:
作为字典键的列表

myDict = {}, 那么是myDict[['a', 'b']] = 'foo'一个合法的 Python 表达式吗?

4

4 回答 4

3

它不是。如有疑问,请尝试!运行此代码会产生:

dn52213m:~ austin$ python t.py 
Traceback (most recent call last):
  File "t.py", line 2, in <module>
  myDict[['a', 'b']] = "foo"
TypeError: unhashable type: 'list'

您的代码创建了一个字典,然后尝试使用列表作为键将元素存储在字典中。不幸的是,列表不是字典中的有效键:-)

于 2012-11-02T01:23:26.117 回答
2

不,因为列表不可散列,因此不能是字典键。

您可以使用

myDict['a', 'b'] = 'foo'

因为你将使用一个元组

于 2012-11-02T01:21:30.660 回答
2

不,不是,因为您尝试使用列表作为键,这会引发错误。字典只允许不可变对象作为键,所以你应该在这里使用元组。

In [9]: myDict = {}

In [10]: myDict[['a', 'b']] = 'foo'   #error
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/home/monty/Desktop/<ipython console> in <module>()

TypeError: unhashable type: 'list'

#using a tuple, works fine

In [11]: myDict[('a', 'b')] = 'foo'

In [12]: myDict
Out[12]: {('a', 'b'): 'foo'}
于 2012-11-02T01:21:47.040 回答
0

这是不合法的,因为列表不能是字典键(因为它们是可变的)。但是元组(不可变)可以:

>>> myDict={}
>>> myDict[['a','b']] = 'foo'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

这可能更接近您想要的:

>>> myDict['a','b'] = 'foo'
>>> myDict[('a','b')] = 'foo'  #same thing, slightly more explicit
>>> myDict
{('a', 'b'): 'foo'}
于 2012-11-02T01:25:13.090 回答