2013-02-06 3 views
0

필드에 정렬 된 매우 큰 파일이 있습니다. 이 데이터와 그룹 줄을 함께 읽고 필드에서 같은 값을 포함하고 싶습니다. 예를 들면 : 나는 반복자 또는 발전기를 사용하는 솔루션을 찾고 있어요파이썬에서 효율적인 메모리 그룹화

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

:

나는 두 개의 필드가있는 파일이 있습니다. 모든 데이터를 메모리로 읽어들이는 것은 불가능합니다. 하나의 그룹 (내부 목록) 만 시간으로 읽을 수 있습니다. groupby를 사용하려했지만 필드에서 같은 값을 기반으로 그룹화하는 방법을 알 수 없었습니다.

어떻게 이런 I 제품 목록 :

[[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']] 
관련 문제