2013-02-06 3 views
0

J'ai un très gros fichier trié sur un champ. Je voudrais lire ces lignes de données et de groupe ensemble que de contenir la même valeur dans le champ. Par exemple:Groupby en mémoire efficace en Python

J'ai un fichier avec deux champs:

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

Je suis à la recherche d'une solution qui utilise un itérateur ou un générateur. Il n'est pas possible pour moi de lire toutes les données en mémoire, seulement un groupe (liste interne) comme un temps. J'essayais d'utiliser groupby, mais je n'arrivais pas à comprendre comment regrouper en fonction de la même valeur dans un champ.

Comment puis-je listes de produits comme celui-ci:

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

Répondre

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