2013-02-06 68 views
0

我有一個非常大的文件按字段排序。我想一起閱讀這些數據和組合線,而不是在該領域中包含相同的值。例如:Python中的內存高效groupby

我有兩個字段的文件:

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]] 

回答

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']]