定义myDict = {},然后myDict [['a','b']] ='foo'

时间:2012-11-02 01:19:02

标签: python expression

  

可能重复:
  A list as a key for a dictionary

myDict = {},然后myDict[['a', 'b']] = 'foo'是合法的Python表达式吗?

4 个答案:

答案 0 :(得分: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'

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

答案 1 :(得分:2)

否,因为列表不可清除,因此不能是字典键。

您可以使用

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

因为你将使用元组

答案 2 :(得分: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'}

答案 3 :(得分: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'}