Python中的内存高效groupby

时间:2013-02-06 16:25:50

标签: python

我在一个字段上排序了一个非常大的文件。我想将这些数据和组线读在一起,而不是在字段中包含相同的值。例如:

我有一个包含两个字段的文件:

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

我正在寻找使用迭代器或生成器的解决方案。我不可能将所有数据读入内存,只能将一个组(内部列表)作为时间读取。我试图使用groupby,但无法弄清楚如何根据字段中的相同值进行分组。

我如何产品列表如下:

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

1 个答案:

答案 0 :(得分: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']]