0

到目前为止,这是我的程序。我需要做的是写在docString.

#string, list, list --> Dictionary
def addMovie (title, charList, actList):
    """The function addMovie takes a title of the movie, a list of characters,
    and a list of actors. (The order of characters and actors match one
    another). The function addMovie adds a pair to myIMDb. The key is the title
    of the movie while the value is a dictionary that matches characters to
    actors"""

    dict2 = {}
    for i in range (0, len(charList)):
        dict2 [charList[i]] = actList[i]

    myDict = {title, dict2}
    return myDict

字典myIMBd当前为空。但我需要帮助的是循环。当我尝试在跑步者中做到这一点时。

addMovie("Shutter Island", ['Teddy Daniels','Crazy Lady'],['Leodnardo diCaprio', 'old actress'] )

我收到一条错误消息

Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
addMovie("Shutter Island", ['Teddy Daniels','Crazy Lady'],['Leodnardo diCaprio', 'old actress'] )
File "C:\Python33\makeDictionary.py", line 10, in addMovie
myDict = {title, dict2}
TypeError: unhashable type: 'dict'

这是否意味着我不能在字典中拥有字典?如果是这样,我如何将它从字典更改为非字典。如果我可以在字典中有一个字典,为什么这不起作用。

4

5 回答 5

2

你想要这样的东西:

myDict = {title: dict2}

您提供的实际上是 Python 的集合文字。

于 2013-10-22T21:19:04.243 回答
2

您正在创建一个set. 改用这个

myDict = {title: dict2}

python 中的Adict是不可散列的,并且对某个集合的要求是它是可散列的(这就是您可以从错误消息中快速判断您做错了什么的方法)。用逗号和 no :,你写的是set文字符号。

此外,dict密钥必须是可散列的,但这不是您的问题。

于 2013-10-22T21:19:19.677 回答
1

这不是dict,而是set

myDict = {title, dict2}

您应该使用冒号来创建dict

myDict = {title: dict2}

dict但是这个异常dict也可能与

类型错误:不可散列的类型:'dict'

如果您尝试dict用作其他键dictset您的项目,则会收到此错误

于 2013-10-22T21:18:31.757 回答
0

正如其他人指出的那样,您,在应该说的时候说:

话虽如此,这个版本也可以工作,但不需要循环:

def addMovie (title, charList, actList):
    return { title : dict(zip(charList, actList)) }
于 2013-10-22T21:43:20.397 回答
0

这就是你想要的:

  def addMovie (title, charList, actList):
    dict2 = {}
    myDict={}
    for i in range (0, len(charList)):
        dict2 [charList[i]] = actList[i]
    myDict[title] = dict2
    return myDict

  #printed for testing
  print addMovie("Shutter Island", ['Teddy Daniels','Crazy Lady'],['Leodnardo diCaprio', 'old actress'] )
于 2013-10-22T21:27:45.110 回答