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)
何も見逃さないようにチャンク間でオーバーラップを作成する必要があります。
擬似コードでは、次のことができます。
- 辞書を作成する 100 行を読み取り
d
ます。 - 辞書を処理する
d
d
これまでに見た最大値の 10 以内にないものをすべて削除します 。- 繰り返しますが、常に 100 行を超えるデータが入らないように注意してください
d
。
Pythonでこれを行う良い方法はありますか?
アップデート。 問題の詳細。d
10 以内の最初の値に関連付けられたリスト内の値の数に応じて、ペアを出力するペアの 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行を読み続けます。