要求统计所有演员中关系最好的n个演员及其共同参演电影数量(n>=2),这里关系好的定义为共同参演的电影数量最多。 编写程序,使用Python扩展库(比如openpyxl)读取Excel文件中的数据,返回一个字典,字典的键为演员姓名,值为该演员参演的电影名称的集合,读取数据时,跳过表头,对于每一行的有效数据,获取每一行的电影名称和演员清单,对该电影的参演演员进行分割得到演员列表,列表中的每个演员都参演过该行对应的电影。 要求,在参考代码基础上进一步实现,打印输出关系最好的n个演员共同参演的电影名称
时间: 2024-02-12 19:03:29 浏览: 89
好的,我可以为您提供一个Python程序,使用openpyxl库读取Excel文件中的数据,并统计出关系最好的n个演员及其共同参演电影数量。以下是代码实现:
```python
import openpyxl
def get_actor_movie_dict(file_path):
"""读取Excel文件,返回演员和电影的字典"""
actor_movie_dict = {}
wb = openpyxl.load_workbook(file_path)
ws = wb.active
for row in ws.iter_rows(min_row=2):
movie_name = row[0].value
actors = row[1].value.split(",")
for actor in actors:
actor = actor.strip()
if actor not in actor_movie_dict:
actor_movie_dict[actor] = set()
actor_movie_dict[actor].add(movie_name)
return actor_movie_dict
def get_top_n_actors(actor_movie_dict, n):
"""统计关系最好的n个演员"""
top_actors = []
for actor1, movies1 in actor_movie_dict.items():
if len(top_actors) == 0:
top_actors.append((actor1, len(movies1)))
else:
for i, (actor2, movies2) in enumerate(top_actors):
common_movies = movies1.intersection(movies2)
if len(common_movies) > 0:
if len(top_actors) < n:
top_actors.append((actor1, len(movies1)))
elif len(common_movies) > min([len(movies) for _, movies in top_actors]):
top_actors[i] = (actor1, len(movies1))
break
return top_actors
def get_common_movies(actor_movie_dict, actors):
"""获取多个演员共同参演的电影"""
common_movies = set.intersection(*[actor_movie_dict[actor] for actor in actors])
return common_movies
if __name__ == '__main__':
file_path = "movies.xlsx"
actor_movie_dict = get_actor_movie_dict(file_path)
n = 5
top_actors = get_top_n_actors(actor_movie_dict, n)
for actor, movies in top_actors:
print(f"{actor}参演了{movies}部电影,和其他关系最好的演员共同参演的电影如下:")
for other_actor, _ in top_actors:
if actor != other_actor:
common_movies = get_common_movies(actor_movie_dict, [actor, other_actor])
print(f"{actor}和{other_actor}共同参演的电影有:{', '.join(common_movies)}")
```
代码使用了三个函数:
- `get_actor_movie_dict`函数:读取Excel文件,返回演员和电影的字典。
- `get_top_n_actors`函数:统计关系最好的n个演员。
- `get_common_movies`函数:获取多个演员共同参演的电影。
在`main`函数中,我们首先调用`get_actor_movie_dict`函数读取Excel文件,然后调用`get_top_n_actors`函数统计关系最好的n个演员。最后,对于每个关系最好的演员,我们调用`get_common_movies`函数获取和其他关系最好的演员共同参演的电影,并打印输出。
请注意修改代码中的`file_path`和`n`变量,使其适用于您的实际情况。
阅读全文