我正在尝试从文本文件导入数据,然后计算出3个分数的平均值,这是我的代码到目前为止
for line in fi:
column = line.split(",")
names = column[0]
scores = int(column[1].strip())
count = 0
while count < 3:
d.setdefault(names, []).append(scores)
count = count + 1
averages=[]
for name, v in d.items():
average = (sum(v)/len(v))
averages.append((name, average))
for name, average in sorted(averages, key=lambda a: a[1], reverse=True):
print(name, average)
此代码只显示3个分数中的第一个,并且无法计算平均值 文件如下所示
andy,2,8,9
john,4,5,8
james,9,5,3
elliot,3,6,2
Alphie,3,2,4
有人可以帮忙吗?
答案 0 :(得分:0)
它仅打印第一个分数,因为您只获得第一个分数。
更改此行:
scores = int(column[1].strip())
到此:
scores = [int(x) for x in column[1:]]
现在,scores
是一个列表,而不是单个值,这意味着您必须extend
d
中的d.setdefault(names, []).extend(scores)
列表:
<?php
$foo = 0;
function letsLoop() {
while ($foo != -1) {
changeFoo();
echo "Hello, world!\n";
}
}
function changeFoo() {
extract($GLOBALS);
$foo = -1;
}
letsLoop();
答案 1 :(得分:0)
希望这个有所帮助:
from __future__ import division
dic={}
with open("filename.txt","r") as f:
for line in f:
lst=line.split(",")
dic[lst[0]]=sum(map(int,lst[1:]))/3 #map is converting string to int
print dic
输出:
{
'james': 5.666666666666667,
'john': 5.666666666666667,
'andy': 6.333333333333333,
'elliot': 3.6666666666666665,
'Alphie': 3.0
}
最后,如果您想按值对字典进行排序(虽然您无法对字典进行排序,因为字典是无序的)并获得元组列表,请执行以下操作:
print sorted(dic.items(), key=lambda x:x[1],reverse=True)
输出:
[('andy', 6.333333333333333), ('james', 5.666666666666667),
('john', 5.666666666666667), ('elliot', 3.6666666666666665),
('Alphie', 3.0)
]
答案 2 :(得分:0)
不确定字典的用途是什么,但这里是对您要实现的目标的全面尝试。
averages = []
for line in fi:
data = line.split(",")
scores = map(int, data[1:])
averages.append((data[0], sum(scores)/float(len(scores))))
for name, average in sorted(averages, key=lambda a: a[1], reverse=True):
print(name, average)
('andy', 6.333333333333333)
('john', 5.666666666666667)
('james', 5.666666666666667)
('elliot', 3.6666666666666665)
('Alphie', 3.0)