0

フィールドでソートされた非常に大きなファイルがあります。このデータを読み取り、フィールドに同じ値が含まれる行をグループ化したいと思います。例えば:

2 つのフィールドを持つファイルがあります。

12    fish
50    fish
1     turtle
11    dog
34    dog
12    dog

イテレータまたはジェネレータを使用するソリューションを探しています。すべてのデータを一度に 1 つのグループ (内部リスト) だけをメモリに読み込むことはできません。groupby を使用しようとしましたが、フィールド内の同じ値に基づいてグループ化する方法がわかりませんでした。

次のような製品リストを作成するにはどうすればよいですか。

[[12, fish], [50, fish]]
[[1, turtle]]
[[11, dog], [34, dog] [12, dog]]
4

1 に答える 1

6
from itertools import groupby
from operator import itemgetter

with open('somefile') as fin:
    lines = (line.split() for line in fin)
    for key, items in groupby(lines, itemgetter(1)):
        print list(items)

[['12', 'fish'], ['50', 'fish']]
[['1', 'turtle']]
[['11', 'dog'], ['34', 'dog'], ['12', 'dog']]
于 2013-02-06T16:28:07.487 に答える