0

私はデータのリストを持っており、それらは次のようにフォーマットされています: (以下の行はそれらの一部にすぎません)

2   377222  TOYOTA MOTOR CORPORATION    TOYOTA  PASEO   1994    Y   19941226    N   0   0   PARKING BRAKE:CONVENTIONAL  SAN JOSE        CA  JT2EL45U5R0 19950103    19950103        1   PARKED ON FLAT SURFACE EMERGENCY BRAKING ENGAGED VEHICLE ROLLED REARWARD.  TT   EVOQ                                                                                                    V           
1   958164  TOYOTA MOTOR CORPORATION    TOYOTA  LAND CRUISER    1994        19941223    N   0   0   SERVICE BRAKES, HYDRAULIC:ANTILOCK  ARNOLD          CA  JT3DJ81W8R0 19950103    19950103            ABS SYSTEM FAILURE, AT 20MPH.  TT   EVOQ                                                                                                    V
46  958153  DAIMLERCHRYSLER CORPORATION DODGE   CARAVAN 1987        19940901    N   0   0   EQUIPMENT:MECHANICAL:CARRIER/RACK   CORBETT         OR  2B4FK4130HR 19950103    19950103        1   CABLE ATTACHMENT THAT SECURES THE SPARE TIRE BROKE WHILE DRIVING.  TT   EVOQ                                                                                                    V   
98  958178  GENERAL MOTORS CORP.    GMC SAFARI  1994        19941223    N   0   0   SERVICE BRAKES, HYDRAULIC:FOUNDATION COMPONENTS MILAN           MI  1GDDM19W4RB 19950103    19950103        1   BRAKES FAILED DUE TO BATTERY MALFUNCTIONING WHEN TOO MUCH POWER WAS DRAWN FROM BATTERY FOR RADIO.   TT  EVOQ                                                                                                    V   

index(1) 整数をキーとして使用し、文内の他の 2 つの要素のタプルを値として使用して辞書を作成する最良の方法は何ですか? 目的の出力は次のようになります。

function(filename)[2]
('TOTOTA MOTOR CORPORATION','19941226','SAN JOSE','CA')

これが私が今持っているもので、最初にそれらすべてを辞書に入れようとしていましたが、リスト全体を反復処理するのではなく、1 行の要素を返すだけです。私のコードで何が問題になったのですか? または、少なくとも最初のステップ、つまりすべてを辞書に入れるにはどうすればよいですか?

def function(filename):
    with open filename as FileObject:
        A=[]
        for lines in FileObject:
            B=[line.split("\t")[0]]
            A+=B
            C=[line.split("\t")[2]]
            A=A+B+C
            D=[line.split("\t")[12]]
            A=A+B+C+D
            E={A:(B,C,D)for A in A}
    return E
print function(filename)
4

2 に答える 2

2

ループを実行するたびに新しい辞書を作成しています (辞書に追加するのではありません) ( E={A:(B,C,D)for A in A})。ループに入る前に辞書を宣言し、ループを通過するたびにエントリを追加します。

def create_database(f)
    """ Returns a populated dictionary.  Iterates over the input 'f'. """
    data = {}
    for line in f:
        # add stuff to data
        key, datum = parse_line(line)
        data[key] = datum
    return data
于 2012-10-29T19:51:16.523 に答える
1

csvモジュール(タブ区切りファイルの処理に使用できます)を使用し、場合によってはoperator.itemgetter便利な機能として使用します。

with open('yourfile') as fin:
    tabin = csv.reader(fin, delimiter='\t')
    # change itemgetter to include the relevant column indices
    your_dict = {int(row[0]): itemgetter(2, 12)(row) for row in tabin}

print your_dict[2]
于 2012-10-29T19:56:23.267 に答える