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

Python 定义myDict={},然后定义myDict[';a';,';b';]=';foo';,python,expression,Python,Expression,可能重复: myDict={},然后myDict[['a','b']]='foo'是合法的Python表达式吗?否,因为列表不可散列,因此不能作为字典键 你可以用 myDict['a', 'b'] = 'foo' 因为您将使用元组不,它不是,因为您试图使用列表作为键,这将引发错误。 字典只允许不可变的对象作为键,所以这里应该使用元组 In [9]: myDict = {} In [10]: myDict[['a', 'b']] = 'foo' #error --------------

可能重复:


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

否,因为列表不可散列,因此不能作为字典键

你可以用

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

因为您将使用元组

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

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'}
[9]中的
:myDict={}
在[10]中:myDict[['a','b']]='foo'#错误
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
/主页/月份/桌面/输入()
TypeError:不可损坏的类型:“列表”
#使用元组,效果很好
在[11]中:myDict[('a','b')]='foo'
在[12]中:myDict
Out[12]:{('a','b'):'foo'}

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

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'
dn52213m:~austin$python t.py
回溯(最近一次呼叫最后一次):
文件“t.py”,第2行,在
myDict['a','b']]=“foo”
TypeError:不可损坏的类型:“列表”

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

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


你到底想做什么?如果你解释了你的期望,以及你得到了什么…你可以从Python教程开始。好吧,它在语法上是有效的(尽管它在运行时会爆炸)。你可以使用元组作为dict的键。这似乎是你试图做的。这个问题是麻省理工学院6.00x期中考试的一部分:
>>> 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'}