0

「件名、値、ワークロード」形式の行数を含む .txt ファイルがあり、dict[subect]: (値、ワークロード) 形式で辞書に出力します。これはそうするための私のコードです:

for line in inputFile:
        lineList.append(line.split(",", 3))
for i in range(0, len(lineList)):
        subjectDict[lineList[i][0]] = (lineList[i][1], lineList[i][2])
        print subjectDict[lineList[i][0]]

しかし、プログラムを実行すると、subjectDict の値が "'6', '2\r\n'." という形式のタプルで返されます。この r\n ビジネスは何ですか? テキストファイルの改行と関係があると思います。そのため、最初に分割メソッドに最大3を入れましたが、2\r\nを1つの文字列として解釈しているようです. また、タプル内のこれらのリスト項目をそれぞれ整数に変換するより効率的な方法はありますか、または単に行う必要があります:

subjectDict[lineList[i][0]] = (int(lineList[i][1]), int(lineList[i][2])) 

ありがとう。

4

3 に答える 3

1

以下をせよ:

for line in inputFile:
        lineList.append(line.strip().split(",", 3))
for i in range(0, len(lineList)):
        subjectDict[lineList[i][0]] = (lineList[i][1], lineList[i][2])
        print subjectDict[lineList[i][0]]

strip メソッドは、文字列の先頭と末尾にあるすべての空白 (\r\n 文字を含む) を取り除きます。\r\n は行末です (\r\n はおそらく Windows ファイルを開いていることを意味し、Linux/Mac ファイルでは通常 \n を行末として使用します)。

私の知る限り、 int(someStrVar) は整数に変換する最も効率的な方法です。

後でこの lineList に関心がないと仮定すると、次のことができます。

for line in inputFile:
        lineSplit = line.strip().split(",", 3)
        subjectDict[lineSplit [0]] = (lineSplit [1], lineSplit [2])
        print subjectDict[lineSplit [0]]
于 2012-10-04T22:57:33.577 に答える
1

これを試して:

output_dict = {}
with open(r"filename.txt") as f:
    for line in f:
        line = line.strip() # remove newlines and such (the '/r/n' bit)
        subject, value, workload = line.split(',', 3)
        output_dict[subject] = (int(value), int(workload))

それで、私はいくつかの変更を加えました。以前line.strip()は、文字列から改行 (および周囲の空白) を削除していました。また、効率を上げるために、2 つのループを 1 つにまとめました。

タプルの各項目を int に変換するには、次のようにします。

my_tuple = tuple(int(i) for i in my_tuple)

int(value)...これは基本的にタプルに変換されたジェネレーターの内包表記ですが、変換する項目が 2 つしかないことを考えるとint(workload)、特に のような扱いにくいものを入力する必要がないため、単に and と入力する方がおそらく理にかなっていますint(lineList[i][1])

于 2012-10-04T23:00:05.947 に答える
1

リスト内包表記を使用して、私が提案するのは次のとおりです。

with open(r"test.txt") as f:
    reBuff = [x.split(",") for x in f.readlines()]
    outDict = dict([(subject.strip(), (int(value.strip()), int(workload.strip()))) for subject,value,workload in reBuff])

形式のリストまたはタプルが[(key, value),(key, value)]あれば、簡単に辞書に変換できます。

于 2012-10-05T00:28:28.463 に答える