for actor_comb, info in sorted(actor_comb_dict.items(), key=lambda x: (-x[1][0], pinyin(x[0]))): if len(actor_comb) == 3: actor_comb_str = ','.join(actor_comb) ws2.cell(row=row_num, column=1).value = actor_comb_str ws2.cell(row=row_num, column=2).value = info[0] ws2.cell(row=row_num, column=3).value = ','.join(info[1]) row_num += 1 # 写入二人组合 for actor_comb, info in sorted(actor_comb_dict.items(), key=lambda x: (-x[1][0], pinyin(x[0]))): if len(actor_comb) == 2: actor_comb_str = ','.join(actor_comb) is_covered = False for three_actor_comb in actor_comb_dict: if len(three_actor_comb) == 3 and set(actor_comb).issubset(set(three_actor_comb)): is_covered = True break if not is_covered: ws2.cell(row=row_num, column=1).value = actor_comb_str ws2.cell(row=row_num, column=2).value = info[0] ws2.cell(row=row_num, column=3).value = ','.join(info[1]) row_num += 1 wb.save('D:\\pythonProject1\\电影信息统计.xlsx') wb.close() actor_combination_statistics()请详细地解释上述代码
时间: 2024-04-28 07:22:20 浏览: 334
这段代码是一个函数,函数名为actor_combination_statistics()。该函数实现了对电影演员组合的统计和排名,并将结果写入一个Excel文件中。
具体来说,该函数首先定义了一个字典actor_comb_dict,用于存储每个演员组合的出现次数和参演电影列表。接着,函数通过遍历电影列表,对每个电影的演员组合进行统计,更新actor_comb_dict中的数据。
随后,函数通过两个循环分别对三人组合和二人组合进行排序和筛选。排序时,按照出现次数和拼音顺序进行排序。筛选时,对于一个二人组合,只有当它没有被任何一个三人组合包含时才会被计入结果。最后,函数将结果写入Excel文件中。
总之,这段代码实现了一个简单的电影演员组合统计功能,通过Excel表格的形式展示了不同组合的出现次数和相关信息。
相关问题
def actor_combination_statistics(): wb = openpyxl.load_workbook('D:\\pythonProject1\\电影信息统计.xlsx') ws1 = wb['电影信息统计'] ws2 = wb.create_sheet('演员组合参演统计') actor_comb_dict = {} for row in ws1.iter_rows(min_row=2, values_only=True): actors = row[3].split(',') for i in range(len(actors)): for j in range(i + 1, len(actors)): actor_comb = tuple(sorted([actors[i], actors[j]])) if actor_comb not in actor_comb_dict: actor_comb_dict[actor_comb] = [1, [row[1]]] else: actor_comb_dict[actor_comb][0] += 1 actor_comb_dict[actor_comb][1].append(row[1]) if len(actors) >= 3: actor_combList = [] for i in range(len(actors)): for j in range(i + 1, len(actors)): for k in range(j + 1, len(actors)): actor_comb = tuple(sorted([actors[i], actors[j], actors[k]])) actor_combList.append(actor_comb) if len(actor_combList) >= 2: actor_combList1 = sample(actor_combList, 2) for actor_comb1 in actor_combList1: if actor_comb1 not in actor_comb_dict: actor_comb_dict[actor_comb1] = [1, [row[1]]] else: actor_comb_dict[actor_comb1][0] += 1 actor_comb_dict[actor_comb1][1].append(row[1]) else: for actor_comb in actor_combList: if actor_comb not in actor_comb_dict: actor_comb_dict[actor_comb] = [1, [row[1]]] else: actor_comb_dict[actor_comb][0] += 1 actor_comb_dict[actor_comb][1].append(row[1]) ws2['A1'] = '演员组合' ws2['B1'] = '演员组合参演电影数量' ws2['C1'] = '演员组合参演电影列表' row_num = 2请详细地解释上述代码
这段代码的功能是对电影信息统计表格中的演员组合进行统计,并将结果输出到一个新的 Excel 表格中。
1. 首先,通过 openpyxl 库中的 `load_workbook` 方法读取 Excel 表格文件,得到一个 Workbook 对象,并将第一个工作表赋值给 `ws1` 变量,同时创建一个名为 `演员组合参演统计` 的新工作表,并将其赋值给 `ws2` 变量。
2. 定义一个字典 `actor_comb_dict`,用于存储演员组合及其参演电影数量和电影列表。
3. 对 `ws1` 工作表的每一行进行遍历,通过 `iter_rows` 方法获取每一行的数据,并将演员名称按逗号分隔成列表 `actors`。
4. 对于每个演员列表中的两个演员,将其组合成一个元组 `actor_comb`,并将其按照字典的方式存入 `actor_comb_dict` 中。如果该组演员组合在字典中不存在,则将其添加到字典中,并将其参演电影数量设为 1,参演电影列表设为当前电影名称;否则将其参演电影数量加 1,参演电影列表加上当前电影名称。
5. 对于演员列表中包含三个或三个以上演员的电影,对其中的三个演员进行组合,将组合结果存入列表 `actor_combList` 中。如果 `actor_combList` 中的元素个数大于等于 2,则从中随机选取两个元素,将其按照字典的方式存入 `actor_comb_dict` 中。否则,将 `actor_combList` 中的每个元素按照字典的方式存入 `actor_comb_dict` 中。
6. 在新工作表 `ws2` 的第一行分别添加列名为 `演员组合`、`演员组合参演电影数量` 和 `演员组合参演电影列表`。
7. 遍历 `actor_comb_dict` 字典中的所有键值对,在新工作表 `ws2` 中新增一行,分别将演员组合、演员组合参演电影数量和演员组合参演电影列表输出到对应的单元格中。最后将行号 `row_num` 加 1,以便输出下一行数据。
修改该代码import openpyxl from openpyxl import Workbook fn = r'D:\Python Homework\实践2素材.xlsx' wb = openpyxl.load_workbook(fn) ws = wb.active actor_dict = dict() for i, b in enumerate(ws): if i == 0: continue filmName, actor = b[0].value, b[2].value.split('\n') for a in actor: actor_dict[a] = actor_dict.get(a,set()) actor_dict[a].add(filmName) actor_lict = sorted(actor_dict.items(), key=lambda x: str(x[0][2:])) actor_dict = dict(actor_dict) print("演员所参演的电影字典:{}".format(actor_dict))
代码中有一个小错误,actor_lict 应该是 actor_dict,下面是修改后的代码:
```python
import openpyxl
from openpyxl import Workbook
fn = r'D:\Python Homework\实践2素材.xlsx'
wb = openpyxl.load_workbook(fn)
ws = wb.active
actor_dict = dict()
for i, b in enumerate(ws):
if i == 0:
continue
filmName, actor = b[0].value, b[2].value.split('\n')
for a in actor:
actor_dict[a] = actor_dict.get(a,set())
actor_dict[a].add(filmName)
actor_dict = dict(sorted(actor_dict.items(), key=lambda x: str(x[0][2:])))
print("演员所参演的电影字典:{}".format(actor_dict))
```
这段代码的功能是读取一个 Excel 文件,将演员和电影之间的关系存储在一个字典中,最后按照演员名字的首字母排序输出。
阅读全文
相关推荐













