如何将Python代码输出的第二列avg_n_ratings按降序排序
iOS应用分类平均评分量降序排序实现方案
问题根源
现有代码在遍历分类过程中计算完单分类平均评分量后直接打印,未对全部分类的计算结果做归集、排序操作,输出顺序完全跟随genres_ios的原始遍历顺序,无法实现按avg_n_ratings降序排列的效果。
实现步骤
- 新增结果存储列表,计算过程中不直接打印,将每个分类的名称、对应平均评分量以元组形式存入列表
- 调用Python内置
sorted()方法对结果列表排序,指定排序维度为平均评分量、排序规则为降序 - 遍历排序完成的结果列表,按格式输出内容
可直接运行的修改后代码
genres_ios = freq_table(ios_final, -5) # 初始化列表存储分类与对应平均评分量的映射结果 genre_rating_res = [] for genre in genres_ios: total = 0 len_genre = 0 for app in ios_final: genre_app = app[-5] if genre_app == genre: n_ratings = float(app[5]) total += n_ratings len_genre += 1 avg_n_ratings = total / len_genre # 结果追加到存储列表,暂不打印 genre_rating_res.append( (genre, avg_n_ratings) ) # 按平均评分量(元组第二个元素)降序排序 sorted_res = sorted(genre_rating_res, key=lambda item: item[1], reverse=True) # 遍历排序后的结果输出 for genre_name, avg_rating_count in sorted_res: print(genre_name, ':', avg_rating_count)
关键参数说明
key=lambda item: item[1]:指定排序的参考维度为元组的第二个元素,也就是计算得到的avg_n_ratings字段reverse=True:控制排序为降序,删除该参数时默认按升序排列
内容的提问来源于stack exchange,提问作者hendricks134
相关产品推荐
相关产品推荐

