4

1 行に 2 つの数値があり、2 番目の列で並べ替えられた大きなファイルがあります。最初の列をキーとするリストの辞書を作成します。

私のコードは次のようになります

from collections import defaultdict
d = defaultdict(list)
for line in fin.readline():
    vals = line.split()
    d[vals[0]].append(vals[1])
process(d)

ただし、入力ファイルが大きすぎるためd、メモリに収まりません。

これを回避するには、原則として一度にファイルのチャンクを読み取ることができますが、process(d) 何も見逃さないようにチャンク間でオーバーラップを作成する必要があります。

擬似コードでは、次のことができます。

  1. 辞書を作成する 100 行を読み取りdます。
  2. 辞書を処理するd
  3. dこれまでに見た最大値の 10 以内にないものをすべて削除します 。
  4. 繰り返しますが、常に 100 行を超えるデータが入らないように注意してくださいd

Pythonでこれを行う良い方法はありますか?

アップデート。 問題の詳細。d10 以内の最初の値に関連付けられたリスト内の値の数に応じて、ペアを出力するペアの 2 番目のファイルを読み取るときに使用しdます。2 番目のファイルも 2 番目の列で並べ替えられます。

偽のデータ。 5 行のデータをメモリに収めることができ、値のオーバーラップも 5 にする必要があるとします。

1 1
2 1
1 6
7 6
1 16

したがって、d は {1:[1,6,16],2:[1],7:[6]} です。

次のチャンクでは、最後の値のみを保持する必要があります (16-6 > 5 として)。したがって、設定します

d を {1:[16]} にして、次の4行を読み続けます。

4

3 に答える 3

2

Pandas ライブラリを試してみましたか?特に、データをDataFrame に読み込んでから、最初の列でgroupbyを使用しましたか?

Pandas を使用すると、データ全体で多くの一括操作を効果的に実行でき、必要に応じて遅延して読み取ることができます。

于 2013-07-25T20:27:19.627 に答える