我有这个工作,但我确信必须有一个更好的方法
上下文是一个电影/电视应用程序,所以有标题(电影/电视)和每个,多对多关系中的人。
我有一个“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)
由于
答案 0 :(得分:0)
您应该将cast_unique
更改为使用演员作为键的字典。这将允许更高的性能,因为您不必迭代cast_unique
iterable。
此外,您在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)