题解 | #成绩排序#

成绩排序

https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b

# 成绩排序

number = int(input())
rank = int(input())
data = [input().split(" ") for x in range(number)]
# print(number, rank, data)


def one_idea(mode, test_data):
    """
    思路: 创建2个字典{原始顺序1: 姓名}和{原始顺序2: 分数},原始顺序1==原始顺序2, 
    分数排序之后通过反推:分数->顺序->姓名
    """
    mode = True if mode < 1 else False
    name_dic = dict()
    grade_dic = dict()
    result = list()

    for i in test_data:
        name_dic[test_data.index(i)] = i[0]
        grade_dic[test_data.index(i)] = i[1]
    # 得到排序后的分数
    grade_arr = list(map(int, grade_dic.values()))
    grade_arr.sort(reverse=mode)
    # 结果处理
    for d in grade_arr:
        for k in grade_dic.keys():
            if grade_dic[k] == str(d):
                result_str = [name_dic.get(k), str(d)]
                # 做重复判断
                if result_str not in result:
                    result.append(result_str)
    return result


def other_idea(mode, test_data):
    """
    思路:重点使用list.sort(key=None, reverse=False)中的key参数,即可把列表的多个元组进行排序
    """
    mode = True if mode < 1 else False
    test_data.sort(key=lambda x: int(x[1]), reverse=mode)
    return test_data


if __name__ == '__main__':
    # output = one_idea(rank, data)
    output = other_idea(rank, data)
    # 打印结果
    for r in output:
        print(" ".join(r))

全部评论

相关推荐

11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:48
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务