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

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月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题