0

ここでの簡単な質問、私は持っています

  • 水数をキーとし、滞留時間を値とする辞書 twodee
  • waternumber が 2 列目の値と一致する場合 (line.split()[1]) fileName2 の 9 列目の値を辞書の値で上書きしたい

私は今30分ほど試してきましたが、投稿するのは少し基本的なようですが、将来誰かを助けるかもしれません.

twodee = dict(zip(waternumber, residencetime))


with open(fileName2, "r") as otherinput:
    try:
        for line in otherinput:
            for waternumber, residencetime in twodee.iteritems():
                line.split()[1] == waternumber
                line.split()[9] = residencetime
    except:
        pass

どうもありがとう!

4

2 に答える 2

2

.split()の結果を何にも割り当てておらず、正しくテストしていません。さらに、twodee dict をループする必要はまったくありません。waternumber値が dict に存在するかどうかをin演算子でテストするだけです。

for line in otherinput:
    line = line.split()
    waternumber = int(line[1])
    if waternumber in twodee:
        line[9] = twodee[waternumber]
    print line

最後になりましたが、変更された行で実際に何かを行いたい場合は、ここで印刷します。

少し詳しく説明すると、その中にある 2 つの行は.split()、最終的に何もしない操作です。

            line.split()[1] == waternumber
            line.split()[9] = residencetime

最初の操作は、行をリストに分割し、最初の要素を選択して、それが値と等しいかどうかをテストしwaternumberます。これは または のいずれTrueFalseになりますが、ブール値以外は何もしません。ドロップされるだけで、python はそれに対して動作せず、関係なく次の行が実行されます。

2 番目の操作は、行を再びリストに分割し、9 番目の要素を選択して、それを の値に置き換えますresidencetime。しかし、 の結果はline.split()の値を魔法のように変更するわけではなく、リストlist返します。この場合、リストは何にも割り当てられないため、再び削除されます。

于 2012-08-09T14:26:54.970 に答える
2

コードに関するいくつかの提案:

  1. 多かれ少なかれ特定の例外を指定しない場合は、try-except を使用しないでください (発生すると予想される例外のみを指定してください)。try-except 内にエラーがあり、それらはすべて暗黙のうちに渡されます。
  2. 意味のある方法で結果を保存しないため、置換は役に立ちません(次の反復ごとに失われる反復変数を変更するだけです)
  3. line.split()[1] == waternumberは代入ではなく、比較です。この行は式として評価され、結果はさらに失われます。
  4. .split() の結果は、項目が変更された新しいリスト オブジェクトです。この新しいオブジェクトはさらに失われます (2 を参照)。
于 2012-08-09T14:30:26.753 に答える