Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python比较表中的字符串并返回最佳字符串_Python_Compare - Fatal编程技术网

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

python比较表中的字符串并返回最佳字符串,python,compare,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 我已经做了分割线,但我不知道如何比较线。 帮个忙就好了 dataDic = {}

我有一个表,其中有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
我已经做了分割线,但我不知道如何比较线。 帮个忙就好了

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 

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

使用
排序
函数,将最后一列作为键

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
输出为:

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

您可以使用此函数。

什么是“数据表”?我将“数据表”固定为一个表。它是一个数据帧、一个csv文件、一个嵌套列表……?只是一个空格分隔的文件。谢谢,但由于它不是排序,我不需要最后四行。您可以重新定义:
s=sorted(table,key=lambda x:int(x[-1]),reverse=True)[:3]
('A1', 3445, 1, 214)
('A2', 3603, 2, 144)
('A0', 3314, 3, 134)