• 一文教你搞定Python如何自定义标准排序


    1.字典自定义排序

    按照value排序

    s=dict()
    s['a']=45
    s['b']=44
    s['c']=78
    s['d']=34
    a=sorted(s.items(),key=lambda x:x[1],reverse=True)#按照value降序排序
    a1=sorted(s.items(),key=lambda x:x[1],reverse=False)#按照value升序排序
    print('按照value降序排序:',a)
    print('按照value升序排序:',a1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    结果:

    按照value降序排序: [('c', 78), ('a', 45), ('b', 44), ('d', 34)]
    按照value升序排序: [('d', 34), ('b', 44), ('a', 45), ('c', 78)]
    
    • 1
    • 2

    按照key值排序

    s=dict()
    s['a']=45
    s['b']=44
    s['c']=78
    s['d']=34
    a=sorted(s.items(),key=lambda x:x[0],reverse=True)#按照Key降序排序
    a1=sorted(s.items(),key=lambda x:x[0],reverse=False)#按照Key升序排序
    print('按照Key降序排序:',a)
    print('按照Key升序排序:',a1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    结果:

    按照Key降序排序: [('d', 34), ('c', 78), ('b', 44), ('a', 45)]
    按照Key升序排序: [('a', 45), ('b', 44), ('c', 78), ('d', 34)]
    
    • 1
    • 2

    先按照value降序,再按key升序

    s=dict()
    s['a']=45
    s['b']=44
    s['c']=44
    s['d']=34
    s['r']=45
    s['p']=34
    s['w']=56
    a=sorted(s.items(),key=lambda x:(x[1],-ord(x[0])),reverse=True)#先按照value降序,再按key升序
    print('先按照value降序,再按key升序:',a)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    结果:

    先按照value降序,再按key升序: [('w', 56), ('a', 45), ('r', 45), ('b', 44), ('c', 44), ('d', 34), ('p', 34)]
    
    
    • 1
    • 2

    2.多维列表自定义标准排序

    案例

    大致和字典差不多,这里给一个案例,可以更加清楚一点

    题目描述

    X星学校的运动会正在激烈进行中。
    现在需要请你编写一个程序来显示所有班级的奖牌榜,显示规则如下:
    (1) 优先按照金牌数量降序排列后显示。
    (2) 如果金牌数相等则比较银牌数,银牌数多者显示在前。
    (3) 如果金牌和银牌数都相等,则比较铜牌数,铜牌数多者显示在前。
    (4) 如果金、银、铜数量均相等,则按照班级编号从小到大排列后显示。
    (5) 需要按照班级编号、金牌数、银牌数、铜牌数、奖牌总数的顺序显示每个班级的奖牌情况。
    已知X星学校的班级编号为一个四位正整数,且班级编号具有唯一性。

    输入

    单组输入。
    第1行输入一个正整数N,表示班级的总数量,N<=9000。
    接下来N行,每1行包含四个正整数,分别表示班级编号、金牌数、银牌数和铜牌数。金牌数、银牌数和铜牌数均小于100。两两之间用英文空格隔开。

    输出

    显示按照规则排序之后的奖牌榜,每一行都包含班级编号、金牌数、银牌数、铜牌数和奖牌总数,两两之间用英文空格隔开。
    样例输入 Copy
    4
    1000 4 10 5
    1001 5 11 6
    1002 4 11 4
    1003 4 10 5
    样例输出 Copy
    1001 5 11 6 22
    1002 4 11 4 19
    1000 4 10 5 19
    1003 4 10 5 19

    代码:

    while True:
        n=int(input())
        s=[]
        for i in range(n):
            s.append(list(map(int,input().split())))
        s.sort(key=lambda x:(x[1],x[2],x[3],-x[0]),reverse=True)
        for i in range(n):
            s[i].append(sum(s[i][1:]))
            for j in range(5):
                if j!=0:
                    print(" ",end="")
                print(s[i][j],end="")
            print()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

  • 相关阅读:
    Abbexa丨Abbexa PCR超级混合液使用说明和相关研究
    HS6621Cx 一款低功耗蓝牙SoC芯片 应用于键盘、鼠标和遥控器消费类产品
    在Python中使用LooseVersion进行软件版本号比对
    AI插件开发-AIApplicationSuite模块-应用程序-AIActionManagerSuite模块-动作管理-illustrator插件
    【无标题】
    使用HTTP爬虫ip中的常见误区与解决方法
    JS将伪数组转为真数组
    Java 多线程共享模型之管程(下)
    初识html
    强!10.6K star,一款开源HTTP测试工具,适合新手,简单、容易上手!
  • 原文地址:https://blog.csdn.net/weixin_57662182/article/details/127890324