def scoresort(nx):
lst = {}
for name, scores in nx.items():
avg = sum(scores) / len(scores)
lst[name] = int(avg + 0.5)
res = sorted(lst.items(), key=lambda x: x[1], reverse=True)
return res
stuscor = {'张三':[100, 92, 98], '李四':[70, 20, 100], '王五':[100, 99, 98] }
sorted_scores = scoresort(stuscor)
print(sorted_scores)
遍历字典,然后计算每个学生的平均分,然后排序后返回即可。
补充如下:
参考链接:
def scoresort(nx):
result=[] # 存储结果的列表
# https://blog.csdn.net/Jarry_cm/article/details/99684387
# 遍历学生信息字典
for key,value in nx.items():
single=[] # 存储单个学生姓名和平均分的列表
# 遍历每一项字典的值,计算每个学生的平均分,因为输出无小数,这里转为int
avg=0
for num in value:
avg+=num
avg=int(avg/len(value))
# 单个学生信息列表添加学生姓名
single.append(key)
# 单个学生信息列表添加学生的平均分
single.append(avg)
# 将每个学生的信息列表,添加到结果列表
result.append(single)
# https://blog.csdn.net/dataocean/article/details/105008271
# 使用sorted()函数按成绩从高到低排序结果列表
result = sorted(result,key=lambda d: int(d[1]), reverse=True)
# 返回结果列表
return result
# 将输入的字符串形式的字典,变为字典
# {'Alice':[90,80,85],'Bob':[70,75,80],'Charlie':[80,80,80],'David':[65,70,75]}
# {"数学A":[82,88,70,66],"电子工程A":[90,68,90,86],"计科A":[88,80,72,96]}
stuscor = eval(input())
# 调用scoresort()函数计算出成绩排序列表
s = scoresort(stuscor)
# 打印结果
for i in range(len(s)):
print(f"第{i+1}名是:{s[i][0]},平均分是{s[i][1]}.")