python编写程序统计表中合作电影数目最多的两个演员(大数据作业三)

题目:

1.首先使用openpyxl的load_wokbook打开需要使用的工作表。

2.要统计此表中合作电影数目最多的两名演员,首先需要知道每个演员对应的电影,我们使用字典dic来存储演员对应的电影信息,初始化一个字典,使用for循环进行获取。使用逗号将值划分出来。注意要跳过表头。

3.在获取信息之后,内层嵌套循环,遍历得到的演员列表,如果演员存在于字典中则将对应的参演电影集合合并在一起,若不存在,则创建一个新的空集合作为默认值。

4.全部存放如字典中后跳出循环,获取字典的关键字存放入元组(可迭代即可)。

5.设置一个max变量用来辅助获得两个演员合作电影的数量,设置元组co_actors用来获取合作电影最多的两个演员。

6.使用for循环进行比较,设置common变量,通过&操作符和len()对两个演员出演电影集合的交集进取长度来获取最大合作电影数,并将演员信息储存到co_actors中。

7.循环结束后打印处合作电影数最多的两个演员。

代码如下:

from openpyxl import load_workbook

#首先打开所需文件
wb = load_workbook("电影导演演员信息表.xlsx")
#再打开需要的工作表
ws = wb.worksheets[0]
#1.首先要获取每个演员对应的电影,使用字典来表示,关键字是演员,值是出演的电影,用集合表示
actors_films = dict()#初始化一个字典
# 使用for循环遍历工作表的每一行,获取演员和出演电影
for index,row in enumerate(ws.rows):
    if index == 0:
        continue #如果索引等于0则跳出本次循环,即跳过表头
    film,actors = row[0].value,row[2].value.split(',') #使用逗号将值分隔开
    for actor in actors: #分开后遍历演员列表
        actors_films[actor] = actors_films.get(actor,set()) | {film}
        #将演员及其出演的电影添加到actors_films字典中。如果演员已经在字典中,则获取该演员已出演的电影集合,否则创建一个空集合。然后,通过|操作符(集合的并集操作),
        # 将新的电影名称添加到演员已出演的电影集合中,最后将更新后的集合赋值给该演员键。这样就实现了将演员和出演的电影信息存储到字典中的操作。
        #这里使用了字典的 get() 方法。get() 方法用于获取字典中指定键的值。如果键存在于字典中,则返回对应的值;如果键不存在,则返回指定的默认值。
        # 在这里,如果 actor 这个键不存在于 actors_films 字典中,那么 get() 方法将返回一个空集合 set(),作为默认值。
        #这样做的目的是确保即使演员尚未出现过,也能为其创建一个空的电影集合。
        #|: 这是集合的并集操作符。它用于将两个集合的元素合并成一个新的集合,保留两个集合中的所有唯一元素。在这里,它用于将原来的演员已出演的电影集合与新的电影名称合并。
        #这样做的目的是将新电影名称添加到该演员已出演的电影集合中。


#打印出来对应的数据
print(actors_films)
actors = actors_films.keys() #使用.keys()获取字典的关键字,即所有演员
actors = tuple(actors) #将获取的关键字放入元组中
print(actors)
max = 0 #设置max变量进行统计比较
co_actors = () #用来存放比较得到的出演电影最多的演员
for index,actor1 in enumerate(actors):
    for actor2 in actors[index+1:]:
        common = len(actors_films[actor1] & actors_films[actor2]) #即合作的电影数
        #print(actors_films[actor1] & actors_films[actor2]) #输出合作的相同的电影
        if common > max: #判断并给max赋值
            max = common
            co_actors = (actor1,actor2) #得到两个合作电影最多的演员

print(max,co_actors)

打印如下:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值