是myDict = {}
,然后myDict[['a', 'b']] = 'foo'
是合法的Python表达式吗?
答案 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'}