文章目录
- 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()