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

文章目录

  • 1.字典自定义排序
    • 按照value排序
    • 按照key值排序
    • 先按照value降序,再按key升序
  • 2.多维列表自定义标准排序
    • 案例
    • 题目描述
    • 输入
    • 输出
    • 代码:

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)

结果:

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

按照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)

结果:

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

先按照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)

结果:

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

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()

在这里插入图片描述

你可能感兴趣的:(python,开发语言)