0

我有这个工作,但我相信一定有更好的方法

上下文是一个电影/电视应用程序,因此有标题(电影/电视)和在每个多对多关系中扮演角色的人。

我有一个“titlepeople”模型,其中包含以下信息:

id, people_fk, title_fk, role_title

在演员有很多角色的电影中,我需要显示他们的信息,例如:汤姆汉克斯:园丁、警察 #1、另一个角色 #4

无论如何我可以优化下面的方法,这样代码就不会那么长了吗?

cast_unique = list()
for person in cast:
    #if not in the unique list, add them
    if person.people not in [p.people for p in cast_unique]:
        cast_unique.append(person)
    else:
        # if in the list, append the role information
        if person.role_title:
            for c in cast_unique:
                if c.people == person.people:
                    # append role info
                    c.role_title = '{0} / {1}'.format(c.role_title, person.role_title)

谢谢

4

1 回答 1

0

您应该更改cast_unique为使用演员作为键的字典。这将允许更高的性能,因为您不必迭代cast_unique可迭代对象。

此外,您使用列表推导if person.people not in [p.people for p in cast_unique]:需要为测试的每次迭代创建一个完整的人员列表;其中,可能会使用大量内存,而且在发生匹配时无法短路列表理解。对于这种情况,字典仍然是一种更好的数据类型。

cast_unique = {}
for person in cast:
    if person.people not in cast_unique:
        cast_unique[person.people] = person
    else:
        cast_unique[person.people].role_title = '{0} / {1}'.format(cast_unique[person.people].role_title, person.role_title)
于 2013-08-17T20:57:15.413 回答