【问题标题】:Python: Function that searches through a dictionary in a dictionaryPython:在字典中搜索字典的函数
【发布时间】:2013-10-24 03:13:50
【问题描述】:

我有一个这样的问题

为函数 findActor 编写合约、文档字符串和实现,该函数接受电影标题和角色名称,并返回在给定电影中扮演给定角色的演员/女演员。如果没有找到给定的电影或给定的角色,它会打印一条错误消息并返回一个空字符串

我已经完成了以下有助于执行此操作的功能。而myIMDb是一个全局字典,设置为空dic启动

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]
    myIMDb[len(myIMDb)] = {title: dict2}
    return myIMDb




def listMovies():
    """returns a list of titles of all the movies in the global variable myIMDb"""
    titles = []
    for i in range (len(myIMDb)):
        titles.append((list(myIMDb[i].keys())))
    return titles

这就是我遇到问题的地方。当我想编写 findActor 函数时,我什么也得不到。我还没有完成这个功能,但我认为我做了一些根本错误的事情。我觉得我走错了路,我写得越多,我就越迷失。这就是我的目的。对于如何修复这艘正在下沉的船的任何建议,我们将不胜感激。

def findActor(title, name):
    myIMDb = {}
    for i in range (len(myIMDb)):
        if title == myIMDb[i].keys():
            if name == myIMDb[i].get(name):
                return myIMDb[i].get(name)
        else:
            return "Error: No Movie found"

【问题讨论】:

    标签: python list search dictionary


    【解决方案1】:

    在使用之前,您需要在findActor 中填充您的myIMDB 字典。

    此外,我建议将myIMDB 直接从移动的标题映射到字符。换句话说,不要在addMoive 中使用myIMDb[len(myIMDb)] = {title: dict2},而应该只使用myIMDb[title] = dict2

    这样,当您需要查找标题和字符时,您可以简单地这样做:

    def findActor(title, name):
        if title in myIMDb:
            if name in myIMDb[title]:
                return myIMDb[title][name]
        return "Error: No movie found"
    

    【讨论】:

    • 我正在填充我的 IMDb,我只是忘了说我是。我也按照你的建议做了。它抛弃了我的“listMovies”功能,我的 findActor 仍然遇到同样的问题。无论我在参数中输入什么,它都不会返回任何内容。
    • 嗯,不返回任何内容是指它不返回任何内容或返回错误?在您的原始代码中,由于您还在本地将 myIMDb 初始化为一个空字典,因此当您循环遍历它时,您将什么也不做,因为字典中没有任何内容。确保您使用的是全局 myIMDb 而不是本地空的。
    • 没关系,我想通了,这只是我的一个愚蠢的标签错误。感谢您的帮助!
    【解决方案2】:

    学习任何语言编程的第一件事就是将您的任务简化为子任务。在这里,为什么不首先为一部电影创建一个角色和演员字典。如果你不能这样做,那么你将无法完成整个项目。

    在你努力完成之后,也许其他一切都会到位。

    警告:在现实世界中,有时可能会有多个演员扮演一个角色 - 例如 - 一个孩子长大成人的角色。但这可能不在您的规范中。

    【讨论】:

    • 这些通常不是在数据库中被列为不同的角色吗,例如“成人迈克”和“儿童迈克”?
    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    相关资源
    最近更新 更多