2012-10-10 103 views
-3

在下面給出的示例數據(存儲在文件中)中,我需要以儘可能最快的方式在每個「項目」類別中找到不同的'ids'。我可以通過遍歷每一行然後查找所有項目集並計數,但我正在尋找一種更快的方法,如「Counter」或「itemgetter」。python列表和計數值

「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 

我需要的輸出類似下面的

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

而不只是發佈你的家庭作業,你可以請張貼你試過的東西嗎? – Bryan

+1

櫃檯不是你想要的東西;你正在收集所有獨特的ID,所以收集ID的長度也是你的數量。 –

回答

3

我會使用一個defaultdict與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 - 謝謝。我想我解決了它。無論如何,這個想法應該足夠清楚了......我使用'id'來避免'id'的陰影 - 但它是一個不好的變量名,因爲它暗示着不止一個變量名。更改爲'my_id'。 – mgilson

+0

謝謝。完美工作。我需要檢查它在非常大的文件上的表現。 – Curious