2012-10-10 3 views
-3

Dans les exemples de données donnés ci-dessous (stockés dans un fichier), je dois trouver des identifiants distincts dans chaque catégorie d'article de la manière la plus rapide possible. Je peux le faire en passant par chaque ligne, puis en trouvant tous les ensembles d'items et en comptant, mais je cherche une méthode plus rapide telle que 'Counter' ou 'itemgetter'.Liste de python et valeurs de comptage

"infile.txt"

id item 
444 Anemia 
444 liver 
444 Anemia 
444 Anemia 
222 liver 
222 pancreas 
222 liver 
222 Anemia 
444 pancreas 
444 pancreas 
444 Anemia 
001 Iiver 
001 pancreas 
111 pancreas 
111 liver 
111 liver 
111 pancreas 
555 pancreas 
555 liver 
555 pancreas 
555 liver 
555 pancreas 
555 liver 

j'ai besoin de quelque chose de sortie suivante

item count ids 
pancreas 5 001, 111, 222, 444, 555 
liver 5 111,222,444,555,001 
Anemia 2 222,444 
+4

Au lieu d'afficher votre devoir, pouvez-vous s'il vous plaît poster ce que vous avez essayé? – Bryan

+1

Un compteur n'est pas ce que vous voulez ici; vous collectez tous les identifiants uniques, donc la longueur des identifiants collectés est également votre nombre. –

Répondre

3

j'utiliser un defaultdict avec un set

from collections import defaultdict 
d = defaultdict(set) 
with open(datafile) as f: 
    for line in f: 
     my_id,item = line.split() 
     d[item].add(my_id) 

for item in d: 
    print item,len(d[item]),sorted(d[item]) 
+0

@MartijnPieters - Merci. Je pense que je l'ai réparé. Quoi qu'il en soit, l'idée devrait être assez claire ... J'ai utilisé 'ids' pour éviter d'ombrer' id' - mais c'était un mauvais nom de variable car cela impliquait qu'il y en avait plus d'un. Changé à 'my_id'. – mgilson

+0

Merci. Travaillé parfaitement. J'ai besoin de vérifier comment il se comporte sur de très gros fichiers. – Curious