Closed. This question is
off-topic。它当前不接受答案。
想改善这个问题吗?
Update the question,所以它是
on-topic,用于堆栈溢出。
5年前关闭。
我一直在尝试获取每个名称(键)的平均得分(值)的输出,不幸的是,由于是python的新手,所以我无法在代码中成功实现
avg
函数; /我想知道如何实现我为每个具有多重值的键计算平均值,例如:
Rob: 3,5,2,7
Matt: 9,2,3,4
Dan: 5,6,3,1
同样在计算完之后,我将如何按平均分数的顺序从最高到最低打印键。我是否必须将计算出的平均值输入列表中,还是有其他方法?
到目前为止,这是我的代码:
with open('score_file.txt') as infile:
for line in infile:
name_field, scores = line.split(':')
name = name_field.split()[0]
scores = [int(score.strip()) for score in scores.split(',')]
score_dict[name] = scores
score_dict.setdefault(name, []).extend(scores)
for name in sorted(score_dict.keys()):
print("{} Scored: {}".format(name, avg(score_dict[name])))
使用python3.4可以使用statistics.mean:
from statistics import mean
for name,val in sorted(score_dict.items(),key=lambda x:mean(x[1])):
print("{} Scored: {}".format(name, mean(val))
Dan Scored: 3.75
Rob Scored: 4.25
Matt Scored: 4.5
您也可以删除
score_dict.setdefault(name, []).extend(scores)
,
score_dict[name] = scores
已创建名称/所有分数列表的键/值对。如果您可能有重复的名称,则需要先使用setdefault或更好地使用defaultdict。
同样,使用
sorted(score_dict.keys())
是不必要的,并且效率比使用
sorted(score_dict)
低。
或者只计算一次均值,然后使用itemgetter作为排序的关键:
from statistics import mean
from operator import itemgetter
srted_mean = ((k, mean(v)) for k, v in score_dict.items())
for name,mn in sorted(srted_mean,key=itemgetter(1)):
print("{} Scored: {}".format(name, mn))
我是一名优秀的程序员,十分优秀!