Python计算出文本文件

时间:2015-11-10 19:24:15

标签: python

我正在尝试从文本文件导入数据,然后计算出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

有人可以帮忙吗?

3 个答案:

答案 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)