2015-01-25 3 views
-2

나는 텍스트 파일에서 목록을 가져 와서 사전에 넣는 코드가있다. 다음 코드입니다.파이썬에서 평균 점수를 찾는다

그런 다음이 항목을 사용하여이 목록에있는 결과에서 최고 점수와 최고 평균 점수를 찾습니다. 나의 현재 코드는 다음과 같습니다 그러나

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()숫자 값을 기대하고있다. 먼저 데이터를 숫자로 변환해야합니다.

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

당신은 CSV 데이터를 읽는 것으로 나타났습니다;

당신은 숫자 값을 변환 int() 또는 float()을 사용할 수 있습니다 첫 번째 열이 을 인용하는 경우에도 csv.reader() 당신의 캐릭터 라인 - 투 - 부동 소수점 변환을 수행 할 수 있습니다,

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 module 사용을 고려 csv.reader() 개체를 만들 때 quoting=csv.QUOTE_NONNUMERIC을 사용하면 "을 사용하여 파이썬 코드에 전달되는 열 값을 float()으로 사용하지 않게됩니다.

+0

대단히 감사합니다. 모든 것이 작동합니다. – pythonstudent

관련 문제