请问到底怎么根据平均分用lambda排序啊🥹

python在学习函数的时候 有个问题是利用匿名函数根据字典里值的平均值排序 真的不会啦! 哪个朋友可以帮忙看看 求

img

img


subjs = ['语言', '数学', '英文', '计算机', '马列']
stu = { '彭万里':[85,89,74,85,85], 
        '高大山':[75,79,84,95,65], 
        '谢大海':[75,89,84,95,86],
        '马宏宇':[85,69,79,75,95], 
        '林莽':[82,59,84,83,71], 
        '黄强辉':[45,79,89,75,99],
        '章汉夫':[87,80,78,89,75], 
        '范长江':[65,89,94,95,75] }

# 打印一个科目的所有成绩,如果还要打印名字,把print(stu[key][idx]) 改成 print(key, stu[key][idx]);如果只打印某个人的成绩,需要额外一个名称参数
def printsubjectsc(subject):
    try:
        idx = subjs.index(subject)
        for key in stu.keys():
            print(stu[key][idx])
    except ValueError:
        print("科目不存在")

printsubjectsc('计算机')

# 把sort改成你想改的任何名称都可以,例如NameSorted
print("\n按姓名排序:")
NameSorted = sorted(stu.items(), key=lambda k: k[0], reverse=True)
print(NameSorted)

print("\n按平均分排序:")
sort = sorted(stu.items(), key=lambda k: sum(stu[k[0]]) / len(stu[k[0]]), reverse=True)
print(sort)

print("\n按最高分排序:")
sort = sorted(stu.items(), key=lambda k: max(stu[k[0]]), reverse=True)
print(sort)

print("\n按计算机分数排序:")
sort = sorted(stu.items(), key=lambda k: stu[k[0]][3], reverse=True)
print(sort)

运行结果:

img

sorted(stu.items(), key=lambda x: x[0]) ##姓名
sorted(stu.items(), key=lambda x: sum(x[1]/len(x[1])) ##平均值
sorted(stu.items(), key=lambda x: max(x[1])) ##最高分
sorted(stu.items(), key=lambda x: x[1][3]) ##计算分

如果科目数一样的话,按平均分排序,不就等于按总分排序?后面除以列表长度也可以不用写

AvgscSorted = sorted(stu.items(),key=lambda x:sum(x[1])/len(x[1]),reverse=True)
mydict = {"a":[1,2,3,4,5],"b":[1,2,3,4,8],"c":[1,2,4,4,5],"d":[1,2,4,6,5],"e":[5,2,3,4,5]}
print(sorted(mydict.items(),key = lambda k:sum(k[1])/len(k[1]) ))