python中用sort给列表排序,只有数值地方前两位起作用

如图,将输入按分数大小排序,但当输入三位数参与排序时,第三位数不起作用,比如150分,排序时是按照15来排序

data = input() # 课程名 考分
d={}
while data:
t=data.split()
d[t[0]]=t[1]
data = input()
ls=list(d.items())
ls.sort(key=lambda x:x[1],reverse=True)
s1,g1=ls[0]
s2,g2=ls[len(ls)-1]
a=0
for i in d.values():
a=a+int(i)
a=a/len(ls)
print("最高分课程是{} {}, 最低分课程是{} {}, 平均分是{:.2f}".format(s1,g1,s2,g2,a))

运行结果及报错内容

img

我猜测是字符的比较读取问题,和对应码表有关系,但不会改

我想要达到的结果

把列表第二个数字字符串int()转成数值再排序比较

ls.sort(key=lambda x:int(x[1]),reverse=True)

否则第二个数字是以字符串排序比较的, 字符串比较"150" 小于 "16"

data = input() # 课程名 考分
d={}
while data:
    t=data.split()
    d[t[0]]=int(t[1]) #或者在这里把数字字符串用int()转成数值也可以
    data = input()
    ls=list(d.items())
    ls.sort(key=lambda x:x[1],reverse=True)
s1,g1=ls[0]
s2,g2=ls[len(ls)-1]
a=0
for i in d.values():
    a=a+int(i)
    a=a/len(ls)
print("最高分课程是{} {}, 最低分课程是{} {}, 平均分是{:.2f}".format(s1,g1,s2,g2,a))

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632