2015-01-25 2 views
-2

У меня есть код, который получает список из текстового файла и помещает его в словарь. Это код:нахождение средних баллов в python

fd = open('Results.txt') 
lines = [line.strip() for line in fd] 
adict = {} 
for line in lines: 
    splitted = [i for i in line.split(',')] 
    key = splitted[0] 
    adict[key] = splitted[1:] 
s = addict 

Затем, используя это, я считаю, верхние знаки и верхний средний балл от результатов, которые находятся в этом списке. Мой текущий код:

avg_mark = lambda name:sum(s[name])/len(s[name]) 
for i in sorted(s.keys(),key=avg_mark,reverse=True): 
    print (i,avg_mark(i),"\n") 

Однако, он говорит:

TypeError: unsupported operand type(s) for +: 'int' and 'str' 

Можно ли это исправить?

ответ

3

Данные, считываемые из файла возвращается как строк, но sum() по умолчанию ожидает числовые значения. Сначала вам нужно преобразовать ваши данные в номера.

Вы можете использовать int() или float() для преобразования числовых значений:

adict[key] = [float(n) for n in splitted[1:]] 

Вы, кажется, чтение данных в формате CSV; рассмотреть вопрос об использовании csv module для разбора файла вместо:

import csv 

with open('Results.txt', 'r', newline='') as fd: 
    reader = csv.reader(fd) 
    s = {row[0]: [float(c) for c in row[1:]] for row in reader} 

Если первый столбец цитирует, вы даже можете иметь csv.reader() сделать преобразование строк в-поплавок для вас; используя quoting=csv.QUOTE_NONNUMERIC при создании объекта csv.reader() приведет к чему-либо, что не использует " вокруг значения столбца, которое должно быть передано вашему коду Python как float().

+0

спасибо, что все работает сейчас – pythonstudent

Смежные вопросы