3

さらに処理するためにファイルから日付を読み取る辞書を作成しようとしていますが、コードを機能させることができません。私はPythonで作業しており、この言語は初めてです。私のファイルデータは次のようになります。

Name1   L1  11  P27 41
Name1   L1  13  P27 43
Name1   L2  85  O60 125
Name1   L2  07  O60 107
Name1   L2  68  O60 118
Name1   L2  17  O60 117
Name1   L2  92  O60 192
Name2   L1  04  O60 84
Name2   L1  19  Z91 139
Name2   L2  32  Z91 332

ここで、dict オブジェクトを次のように作成します。

{
    'Name1':[L1,(11,13),(41,43),P27],[L2,(85,07,68,17,92),(125,107,118,117,192),O60],
    'Name2':[L1,(19),(139),Z91],[L2,(32),(332),Z91]
}
4

3 に答える 3

1

Adefaultdictはこの種の問題に役立ちます。辞書エントリに追加できます。エントリがまだ存在しない場合は、通常のように例外をスローする代わりに、空のリストに追加してそこに配置します。これを使用してデータを処理した方法は次のとおりです。

from collections import defaultdict

d=defaultdict(list)
with open("input.txt") as data:
    for line in data:
        line = line.strip().split()
        namelist = d[line[0]]
        try:
            idx = [x[0] for x in namelist].index(line[1])
        except:
            idx = -1
        if len(namelist) and idx >= 0:
            namelist[idx][1].append(line[2])
            namelist[idx][2].append(line[4])
        else:
            namelist.append([line[1], [line[2]], [line[4]], line[3]])

print d
>>> defaultdict(<type 'list'>, 
{'Name2': [
    ['L1', ['04', '19'], ['84', '139'], 'O60'], 
    ['L2', ['32'], ['332'], 'Z91']
], 
'Name1': [
    ['L1', ['11', '13'], ['41', '43'], 'P27'], 
    ['L2', ['85', '07', '68', '17', '92'], ['125', '107', '118', '117', '192'], 'O60']
]})
于 2013-05-25T21:38:09.723 に答える
1

行を処理するには、次を使用します

with open(filename) as file_handle: # open your file
    for line in file_handle:        # iterate over lines
        chunks = line.split()       # extract parts of the lines
        ...

これで、行の一部が含まれますchunks

dict、またはさらに良いものを構築し、defaultdict(list)そこに要素を挿入する必要があります。

于 2013-05-25T21:16:31.610 に答える