2011-02-25 5 views
2

나는 뭔가를 놓치고 있어야하지만 가장 큰 값을 찾아 csv.DictReader() 함수를 사용하여 인쇄하는 데 어려움이 있습니다.파이썬 csv : 가장 큰 값을 가진 행 찾기

CSV 파일입니다 (행이 형식에 너무 넓은 때문에이 필드를 절단뿐만 아니라 행 한) 같은 :

traverse;damage;hull_front;turret_back;penetration;full_name;tier;hull_back;turret_sides;type;hull_sides;turret_front 
38;30;18;16;32;Light Tank MS-1;1;16;16;Light Tank;16;18 
40;30;13;13;32;Light Tank BT-2;2;13;13;Light Tank;13;15 
55;36;15;15;34;Light Tank T-26;2;15;15;Light Tank;15;15 

(희망 나는 모든 필드를 가지고, 내가 가진 사용 원본 파일로 절단.)

을 나는

tanks = csv.DictReader(open('tanks.csv', 'r'), delimiter = ';') 

이 파일을 읽을 수 있지만 나는 예를 발견 할 때 어떤 열이 가장 큰 가치를 가지고 어떤 열, 나는 사전을 통해 읽을 수없는 것. 내 시도는 다음과 같습니다

def top_values(tanks): 
    tank = list(itertools.islice(tanks,1,2)) 

    best_tanks = dict({'turret_front':tank, 'turret_sides':tank, 'turret_back':tank, 
        'hull_front':tank, 'hull_sides':tank, 'hull_back':tank, 
        'penetration':tank, 'damage':tank, 'traverse':tank}) 

    fields = ['turret_front', 'turret_sides', 'turret_back', 
      'hull_front', 'hull_sides', 'hull_back', 
      'penetration', 'damage', 'traverse'] 

    for tank in tanks: 
     for field in fields: 
     if tank[field] > best_tanks[field][field]: 
      best_tanks[field] = tank 

    print "Best tanks by values:\n" 
    for field in fields: 
    tank = best_tanks[field] 
    print field + ": " + tank['full_name'] + "(" + tank[field] + ")" 

그러나 나는이 작업을 수행 할 수있는 방법

Traceback (most recent call last): 
File "./wotalyzer.py", line 102, in <module> 
main(sys.argv[1:]) 
File "./wotalyzer.py", line 98, in main 
top_values(tanks) 
File "./wotalyzer.py", line 44, in top_values 
print field + ": " + tank['full_name'] + "(" + tank[field] + ")" 
TypeError: list indices must be integers, not str 

를 얻을? 새로운 필드를 쉽게 추가 할 수 있도록 이렇게하고 싶습니다.

답변

2

tank = list(itertools.islice(tanks,1,2))에는 탱크를 목록으로 정의합니다.

best_tanks는 값이 목록 탱크 인 사전입니다.

if에서 best_tanks의 목록을 이제 dict 인 변수 탱크로 바꿉니다. 따라서 나중에 ok을 사용하십시오.

그러나

실행되지 않을 경우 if는 best_tanks의 요소는 여전히 문자열 필드 요소를 액세스 할 때 오류 TypeError: list indices must be integers, not str가 발생합니다 목록을있는 best_tanks[field] 결과 목록을 사용할 경우에

+0

그래,이 짓을하고 다른 버그를 수정 한 후 작동합니다 (빈 dict가 함수에 주어짐). – Makis

관련 문제