1

この辞書は、国の 3 文字の国コード (英国を表す GRE) を取り、その後に続く 4 つの連続した数字をタプルとして取ります。{GRE:(204,203,112,116)} のようになり、リスト内のすべての国についてこれを続けます。txt ファイルは次のようになります。

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 etc.;  

これは実際には、フォーマットされていることを示したかっただけのコードではありません。最初の行はヘッダーであるため、プログラムでスキップする必要があります。これまでの私のコードは次のようになります。

def medals(goldMedals):
    infile = open(goldMedals, 'r')
    medalDict = {}
    for line in infile:
        if infile[line] != 0:
            key = line[0:3]
            value = line[3:].split(',')
            medalDict[key] = value
    print(medalDict)
    infile.close()
    return medalDict

medals('GoldMedals.txt')
4

4 に答える 4

0

inspectorG4dgetの答えが最も読みやすいと思います...しかし、コードゴルフをしている人にとっては:

with open('medals.txt', 'r') as infile:
    headers = infile.readline()
    dict([(i[0], tuple(i[1:])) for i in [list(line.strip().split(',')) for line in infile]])
于 2013-07-16T18:20:24.077 に答える
0

テーマのバリエーションとして、残りのすべての列を int に変換し、次を使用しますnamedtuple

from collections import namedtuple

with open('file.txt') as fin:
    # The first line names the columns
    lines = iter(fin)
    columns = lines.next().strip().split(',')
    row = namedtuple('Row', columns[1:])
    results = {}
    for line in lines:
        columns = line.strip().split(',')
        results[columns[0]] = row(*(int(c) for c in columns[1:]))

# Results is now a dict to named tuples

これには、1) 最初の行をスキップし、2) 行へのオフセットと名前付きアクセスの両方を提供するという優れた機能があります。

# These both work to return the 'Games' column
results['ALG'].Games
results['ALG'][0]
于 2013-07-16T18:07:42.087 に答える