python:根据另一列中的ID组合一列中的值

时间:2012-10-05 13:09:37

标签: python

我需要根据第一列中的ID组合制表符分隔文件的第二列中的值。下面给出了这个例子。最快的方法是什么?我可以使用for循环,遍历每一行,但我确信有一些聪明的方法来做,我不知道。

596230  Other postop infection
596230  Disseminated candidiasis
596230  Int inf clstrdium dfcile
596230  Pressure ulcer, site NOS
2846079 Schizophrenia NOS-unspec
7800713 CHF NOS
7800713 Chr airway obstruct NEC
7800713 Polymyalgia rheumatica
7800713 DMII wo cmp nt st uncntr

进入

596230  Other postop infection, Disseminated candidiasis, Int inf clstrdium dfcile, Pressure ulcer, site NOS
2846079 Schizophrenia NOS-unspec
7800713 CHF NOS, Chr airway obstruct NEC, Polymyalgia rheumatica, DMII wo cmp nt st uncntr

3 个答案:

答案 0 :(得分:2)

假设您的文字在文件中:

from collections import defaultdict
items = defaultdict(list)
with open("myfile.txt") as infile:
    for line in file:
        id, text = line.rstrip().split("\t")
        items[id].append(text)
for id in items:
    print id + "\t" + ", ".join(items[id])

这不保留id的原始顺序,但确实保留了文本的顺序。

答案 1 :(得分:1)

如果它们已经排序,您可以在分割线上使用itertools.groupby()来收集它们。如果它们没有排序,那么先将它们排序。

答案 2 :(得分:1)

您可能还会考虑Python csv module来解析您的文件,因为您可以将其设置为使用逗号以外的字符(例如制表符\t)作为分隔符。 基本的例子是这样的:

import csv
with open('myfile', 'rb') as f:
    reader = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
    for row in reader:
        print row

从那里,您可以使用已建议的选项之一将所有项目组合在一起。