2013-07-18 3 views
2

과제를 위해 저는 올림픽 국가에 관한 정보와 메달 수를 검색하는 프로그램을 만들고 있습니다. 내 기능의문자열 키와 튜플 값을 사용하여 파일에서 독해를 읽는 방법은 무엇입니까?

하나는이 형식으로 목록을 간다 :

기능은 키와 국가의 이름으로 사전에이 목록을 통해 이동하고 저장해야
Country,Games,Gold,Silver,Bronze 
AFG,13,0,0,2 
ALG,15,5,2,8 
ARG,40,18,24,28 
ARM,10,1,2,9 
ANZ,2,3,4,5 

, 나머지 네 개의 항목 터플로. 여기

내가 지금까지 함께 일하고 것입니다 : 항목이 대신이

{'AFG': (13, 0, 0, 2)} 

같은 것을보고 지금

def medals(string): 
    '''takes a file, and gathers up the country codes and their medal counts 
    storing them into a dictionary''' 

    #creates an empty dictionary 
    medalDict = {} 
    #creates an empty tuple 
    medalCount =() 
    #These following two lines remove the column headings 
    with open(string) as fin: 
     next(fin) 

     for eachline in fin: 
      code, medal_count = eachline.strip().split(',',1) 
      medalDict[code] = medal_count 

    return medalDict 

은, 의도, 난

받고 있어요
{'AFG': '13,0,0,2'} 

튜플이 아닌 문자열로 저장되는 것처럼 보입니다. 그것은 무엇과 관련이 있습니까?

medalDict[code] = medal_count 

코드 줄? 나는 그것을 튜플에 대한 분리 된 정수 값으로 깔끔하게 변환하는 방법을 너무 확신하지 못한다.

답변

3

당신은

medalDict[code] = medal_count 
에 의해 대체되어야한다 때문에, 값으로 전체 문자열 '13, 0,0,2 '을 저장하는 ,이 행은 유일한 예외입니다. 변경된 것은 이제 '13, 0,0,2 '를리스트 ['13 ','0 ','0 ','2 ']로 나누고이를 튜플로 변환합니다.

medalDict[code] = tuple([int(ele) for ele in medal_count.split(',')]) 

을하지만 당신의 medal_count는 정수가 포함되어 있는지 확인하십시오

또한 정수로 내부 문자열을 변환하기 위해이 작업을 수행 할 수 있습니다.

0

문제는이 것 같다 :만큼만 가능한 한 분할 및 split(...) 분할을하게

split(',',1) 
# should be 
split(',') 

split(..., 1) 때문이다.

그래서 당신은이 작업을 수행 할 수 있어야한다 :

for eachline in fin: 
     code, *medal_count = eachline.strip().split(',') 
     medalDict[code] = medal_count 
1

이 줄 :

code, medal_count = eachline.strip().split(',',1) 

가 ... 다음, ','split 팅 whitespace- strip PED eachline, 1 시간 결과 문자열 두 개를 codemedal_count에 저장하는 중 ... 예, medal_count에는 문자열이 포함되어 있습니다.

  1. 가의 라인을 따라 라인을 추가합니다 :

    이 한 두 가지 방법으로 처리 할 수있는 코드에서이부터 split_counts

    split_counts = tuple(medal_count.split(',')) 
    

    ... 다음 사용하거나, 에

    code, *medal_count = eachline.strip().split(',') 
    
    위의 줄을 변경 (파이썬 3)

  2. ... Extended iterable unpacking을 사용합니다 (목록을 제공하므로 튜플이 필요한 경우 변환해야합니다).

    medalDict[code] = tuple(medal_count.split(',')) 
    

    원래 생각이 정확한지 :