我有一个包含如下数据的文件:
A 1 23 36 -3 ABC
A 1 23 36 -3 ABD
A 1 23 36 -3 CLA
B 2 21 4 -6 PQR
B 2 21 4 -6 CAP
C 5 47 3 -4 FM
C 10 54 6 -5 AKN
D 15 76 3 -4 LGA
D 20 76 10 -6 MHA
我正在比较前5列的每一行,如果它们相等,我使用for循环加入最后一列,这需要花费很多时间。
输出就像:
A 1 23 36 -3 ABC,ABD,CLA
B 2 21 4 -6 PQR,CAP
C 5 47 3 -4 FM
C 10 54 6 -5 AKN
D 15 76 3 -4 LGA
D 20 76 10 -6 MHA
有没有pythonic方式来做到这一点?数据存储为文本文件,行逐行读取。
答案 0 :(得分:1)
这样做:
from __future__ import print_function
from collections import defaultdict
d=defaultdict(list)
with open('/tmp/cols.txt') as f:
for line in f:
line_data=line.strip().split()
d['\t'.join(line_data[0:5])].append(line_data[5])
for k in sorted(d.keys(),
key=lambda s: (s.split()[0], tuple(map(int, s.split()[1:])))):
print(k, '\t',', '.join(d[k]))
打印:
A 1 23 36 -3 ABC, ABD, CLA
B 2 21 4 -6 PQR, CAP
C 5 47 3 -4 FM
C 10 54 6 -5 AKN
D 15 76 3 -4 LGA
D 20 76 10 -6 MHA
答案 1 :(得分:1)
lines = sorted(x.rsplit(' ', 1) for x in YOUR_FILE.read().split('\n'))
new_lines = [x + ','.join(i[1] for i in y) for x,y in
itertools.groupby(lines, operator.itemgetter(0))]
print('\n'.join(new_lines))