m0_55681786 2022-03-18 14:29 采纳率: 20%
浏览 63
已结题

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

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

我想要达到的结果
  • 写回答

2条回答 默认 最新

  • 关注

    把列表第二个数字字符串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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月18日
  • 创建了问题 3月18日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部