1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > python 电影导演演员信息 演员参演电影字典 关系中最好的n个演员

python 电影导演演员信息 演员参演电影字典 关系中最好的n个演员

时间:2022-01-09 11:36:02

相关推荐

python 电影导演演员信息 演员参演电影字典 关系中最好的n个演员

python演员关系分析

一、演员关系分析

实验目的:

熟悉Python扩展库openpyxl的安装与使用。了解Execl文件结构与数据组织形式;熟练掌握集合运算以及集合常用方法;

实验内容:

随机生成不少于20条的电影导演演员信息,并将其存放在excel文件“电影导演演员信息.xlsx”,其中内容按照:电影名称、导演、演员 三列分别存放。每部电影至少有四名演员参演,演员总数不超过15个。要求统计所有演员关系中最好的n个演员及其共同参演电影数量,其中n可以制定为大于或等于2的证书。这里关系好定义为共同参演的电影数量最多。

实验要求:

编写程序,使用Python扩展库openpyxl来进行excel表格的写读操作。读取上述生成的电影导演演员信息表格。返回一个字典。在字典中,使用演员作为键,使用包含该演员参演电影名称的集合作为“值”。读取数据时,跳过表头,对于每一行有效数据,获取每一行的电影名称和演员清单,对该电影的参演演员进行分割得到演员列表,列中的每个研究都参演过该行对应的电影。

实验解题:

生成电影导演演员信息.xlsx

首先我们给 电影名称、导演、演员 命名

movies = ['电影1', '电影2', '电影3', '电影4', '电影5', '电影6', '电影7', '电影8', '电影9', '电影10','电影11', '电影12', '电影13', '电影14', '电影15', '电影16', '电影17', '电影18', '电影19', '电影20']director = ['导演1', '导演2', '导演3', '导演4', '导演5', '导演6', '导演7', '导演8', '导演9', '导演10','导演11', '导演12', '导演13', '导演14', '导演15', '导演16', '导演17', '导演18', '导演19', '导演20']actor = ['演员1', '演员2', '演员3', '演员4', '演员5', '演员6', '演员7', '演员8','演员9', '演员10', '演员11', '演员12', '演员13', '演员14', '演员15']

使用openpyxl将数据填入表中

import randomfrom openpyxl import Workbook# 实例化wb = Workbook()# 激活 worksheetws = wb.active# 设置表头ws.append(['电影名称', '导演', '演员'])col = ws.column_dimensions['C'] #将演员列拓宽col.width = 140for i in range(20):acs = []ac = [] #每次执行时均清空num = random.randint(4,15) #生成演员数量while (len(acs) < num):x = random.randint(0, 14)if x not in acs: #去重acs.append(x)ac.append(actor[x])# 演员输出格式化ac2 = ','.join(str(i) for i in ac)#生成第i行数据ws.append([movies[i], director[i], ac2])wb.save('电影导演演员信息.xlsx')

计算

读入信息表

from openpyxl import Workbook, load_workbook# 打开文件及表wb = load_workbook('电影导演演员信息.xlsx')ws = wb["Sheet"]

生成演员所参演的电影字典

'''使用演员作为键,使用包含该演员参演电影名称的集合作为“值”'''actor_dict = dict()# 遍历Excel文件中的所有行for index, row in enumerate(ws.rows):# 跳过表头,对于每一行有效数据,获取每一行的电影名称和演员清单,if index == 0:continue# 获取电影名称和演员列表filmName, actor = row[0].value, row[2].value.split(',')# 遍历该电影的所有演员,统计参演电影for a in actor:actor_dict[a] = actor_dict.get(a, set())actor_dict[a].add(filmName)actor_list = sorted(actor_dict.items(), key=lambda x: int(x[0][2:]))actor_dict = dict(actor_list)print("演员所参演的电影字典:{}".format(actor_dict))

演员所参演的电影字典:{'演员1': {'电影15', '电影10', '电影11', '电影2', '电影19', '电影12',...

找到关系中最好的n个演员

'''要求统计所有演员关系中最好的n个演员及其共同参演电影数量,其中n可以制定为大于或等于2的证书。这里关系好定义为共同参演的电影数量最多。'''actorPairs = []# 遍历演员和参演电影for index, actor1 in enumerate(actor_list[:-1]):for _, actor2 in enumerate(actor_list[index + 1:]):# 构建演员组合演员组合,这里方便起见设置n=2actorPair = (actor1[0], actor2[0])# 共同参演的电影films = actor1[1] & actor2[1]# 将 演员组合:电影集合 键值对填入序列actorPairs.append((actorPair, films))# 找到一同参演电影次数最多的组合favoriPair = max(actorPairs, key=lambda item: len(item[1]))print("关系中最好的2个演员{},共同参演电影数量{}".format(favoriPair[0],len(favoriPair[1])))

关系中最好的2个演员('演员2', '演员7'),共同参演电影数量11

程序运行截图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。