1

Pythonを使い始めたばかりで、次のようなファイルを読み取るプログラムを作成しようとしています。

AAA x 111
AAB x 111
AAA x 112
AAC x 123
...

ファイルの長さは50行で、辞書のキーとキーに対応する数字のリストに文字を作成しようとしています。

出力を次のようにしたいと思います。

{AAA: ['111', '112'], AAB: ['111'], AAC: [123], ...}

これは私が試したことです

file = open("filename.txt", "r") 
readline = file.readline().rstrip()
while readline!= "":
    list = []
    list = readline.split(" ")
    j = list.index("x")
    k = list[0:j]
    v = list[j + 1:]
    d = {}
    if k not in d == False:
        d[k] = []
    d[k].append(v)
    readline = file.readline().rstrip()

ifステートメントで構文エラーが発生し続け、何が間違っているのか理解できません。

4

4 に答える 4

2

if ステートメントの最後にはコロンが必要です。このバージョンは動作するはずです:

   if k in d == False:
      d[k] = []
      d[k].append(v)
   else:
      d[k].append(v)
于 2012-12-02T22:55:27.957 に答える
2

末尾にコロンがありません。次のように書くこともできます。

if k not in d:
    d[k] = [v]
else:
    d[k].append(v)
于 2012-12-02T22:57:28.423 に答える
2

あなたの人生を少し楽にしますdefaultdict

>>> out = defaultdict(list)
>>> with open('test.txt') as f:
      for line in f.readlines():
        x = line.split()
        out[x[0]].append(int(x[2]))

with可能であれば、ステートメントを使用してファイルを開くこともお勧めします。元の例には と の 2 つのエントリがstrあり、intすべてintここに変換しました。

于 2012-12-02T23:05:54.453 に答える
1

defaultdictの仕事のようですね!他の人が述べたように、行方不明のコロンは別として、全体ifを次のように置き換えることができます。

from collections import defaultdict # placed with your other imports, probably
....
d = defaultdict(lambda:[])
d[k].append(v)
于 2012-12-02T23:01:45.107 に答える