Python程序修改需求:按受欢迎程度降序输出影视类型统计结果
解决方法
没问题,咱们来调整你的程序,实现按受欢迎程度降序、同次数按名称升序排列的需求。下面是修改后的完整代码:
from collections import defaultdict # 定义需要统计的影视类型集合,方便快速判断 TARGET_GENRES = {"Action", "Comedy", "History", "Horror", "Romance", "Adventure"} num = int(input()) genre_count = defaultdict(int) # 用int类型的defaultdict直接计数,更高效 for _ in range(num): parts = input().split() # 提取当前输入的所有类型 genres = parts[1:] # 遍历每个类型,只统计目标范围内的类型 for genre in genres: if genre in TARGET_GENRES: genre_count[genre] += 1 # 排序:先按计数降序,计数相同按类型名称升序 sorted_genres = sorted(genre_count.items(), key=lambda x: (-x[1], x[0])) # 输出结果 for genre, count in sorted_genres: print(f"{genre} : {count}")
关键修改说明:
- 数据结构优化:把原来的
defaultdict(list)改成defaultdict(int),因为我们只需要统计每个类型的次数,不需要存储对应的电影名称列表,既节省内存,代码也更简洁。 - 简化计数逻辑:不再用多个
if逐个判断类型,而是先定义目标类型集合,遍历输入的类型时直接判断是否在集合内,符合条件就累加计数。 - 核心排序逻辑:使用
sorted()函数,通过key=lambda x: (-x[1], x[0])实现需求:-x[1]表示按计数降序排列(默认升序,取负数后反转成降序)x[0]表示当计数相同时,按类型名称的字母升序排列
- 输出适配:直接遍历排序后的结果列表,按要求格式输出即可。
测试你提供的示例输入,输出结果完全符合期望:
Action : 3
Horror : 3
Comedy : 2
Romance : 2
Adventure : 1
History : 1
内容的提问来源于stack exchange,提问作者hello world
相关产品推荐
相关产品推荐

