2

課題として、オリンピック開催国とそのメダル数に関する情報をファイルから取得するプログラムを作成しています。

私の関数の 1 つは、次の形式のリストを通過します。

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

関数はこのリストを調べ、国名をキーとして辞書に格納し、残りの 4 つのエントリをタプルとして格納する必要があります。

ここに私がこれまでに取り組んでいるものがあります:

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)}

代わりに、私は得ています

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

タプルではなく、文字列として格納されているようです。と何か関係があるのでしょうか

medalDict[code] = medal_count

コード行?それをタプルの個別の整数値にきちんと変換する方法がよくわかりません。

4

3 に答える 3

1

この行:

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

... splitwhitespace strip-ped eachline1time、onを ting し、結果の 2 つの文字列をand','に格納しています ... そうです、文字列が含まれています。codemedal_countmedal_count

これは、次の 2 つの方法のいずれかで処理できます。

  1. 次の行に沿って行を追加します。

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

    ...そしてそこsplit_countsからコードで使用するか、または

  2. (Python 3 の場合) 上記の行を次のように変更します。

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

    ... Extended iterable unpackingを使用します (リストが表示されるため、タプルが必要な場合は変換する必要があります)。

于 2013-07-18T15:09:47.797 に答える
0

あなたの問題はこれのようです:

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

split(..., 1)1分割だけにsplit(...)して、できるだけ分割するからです。

したがって、これを行うことができるはずです:

    for eachline in fin:
        code, *medal_count = eachline.strip().split(',')
        medalDict[code] = medal_count
于 2013-07-18T15:06:19.937 に答える