python比较表中的字符串并返回最佳字符串

时间:2015-03-11 05:44:56

标签: python compare

我有一个由空格分隔的3列的表

A1 3445 1  24
A1 3445 1 214
A2 3603 2  45
A2 3603 2 144
A0 3314 3   8
A0 3314 3 134
A0 3314 4  46

我想将最后一列与第一列中的ID(例如A1)进行比较,以返回最大数字的字符串。所以,最终结果将是这样的。

A1 3445 1 214
A2 3603 2 144
A0 3314 3 134

我已经完成了分割线,但我不知道如何比较线。 帮助会很好。

3 个答案:

答案 0 :(得分:0)

dataDic = {}
for data in open('1.txt').readlines():
    id, a, b ,num = data.split(" ")
    if not dataDic.has_key(id):
        dataDic[id] = [a, b, int(num)]
    else:
       if int(num) >= dataDic[id][-1]:
           dataDic[id] = [a, b, int(num)]

print dataDic 

我想,也许这个结果就是你想要的。

答案 1 :(得分:0)

使用sorted功能,将最后一列作为键

with open('a.txt', 'r') as a:  # 'a.txt' is your file
    table = []
    for line in a:
        table.append(line.split())

s = sorted(table, key=lambda x:int(x[-1]), reverse=True)
for r in s:
    print '\t'.join(r)

结果:

A1  3445    1   214
A2  3603    2   144
A0  3314    3   134
A0  3314    4   46
A2  3603    2   45
A1  3445    1   24
A0  3314    3   8

答案 2 :(得分:0)

data = [('A1',3445,1,24),  ('A1',3445,1,214), ('A2',3603,2,45),
        ('A2',3603,2,144), ('A0',3314,3,8),   ('A0',3314,3,134), 
        ('A0',3314,4, 46)]

from itertools import groupby
for  key, group in groupby(data, lambda x: x[0]):
    print sorted(group, key=lambda x: x[-1], reverse=True)[0]

输出结果为:

('A1', 3445, 1, 214)
('A2', 3603, 2, 144)
('A0', 3314, 3, 134)

您可以使用此功能groupby