gpt4 book ai didi

python - 如何按两行排序并打印具有最高值的行

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:21 25 4
gpt4 key购买 nike

我有一个输入文件,

1A  Traes_1AS_6052071D9.1   99.01   101 99.0    
1A Traes_1DS_6BA87D1DA.1 96.04 101 99.0
1A Traes_1BS_480915AD0.1 94.06 101 99.0
1B Traes_1AS_49D585BA6.2 99.01 101 72.0
1B Traes_1BS_47F027BBE.2 98.02 101 89.0
1B Traes_1DS_3F816B920.1 97.03 101 92.0
1C Traes_1AS_3451447E0.1 99.01 101 97.0
1C Traes_1BS_9F243CEA6.2 92.93 99 97.0
1C Traes_1DS_2A6443F45.1 89.90 99 97.0

我需要

  1. 在每个 line[0] 内进行分组和迭代,
  2. line[4] 从最低值到最高值排序,取最高值
  3. 如果它们相似,则选择 line[2] 中具有最高值的结果打印结果,这样我的输出文件如下所示:

要求的输出:

1A  Traes_1AS_6052071D9.1   99.01   101 99.0    
1B Traes_1DS_3F816B920.1 97.03 101 92.0
1C Traes_1AS_3451447E0.1 99.01 101 97.0

这是我的尝试,但它只需要根据最高的line[4]:

import csv
from itertools import groupby
from operator import itemgetter
with open('my_file','rb') as f1:
with open('out_file', 'wb') as f2:
reader = csv.reader(f1, delimiter='\t')
writer1 = csv.writer(f2, delimiter='\t')
for group, rows in groupby(reader, itemgetter(0)):
seen = set()
rows = sorted(rows, key=lambda r: float(r[4]))
for row in rows:
max(rows, key=lambda r: float(r[4]))
writer1.writerow(row)

最佳答案

只需让 maxkey 函数返回 (r[4], r[2]) 的元组即可

稍微简化的示例(没有输出文件)

with open('data.txt','rb') as f1:
reader = csv.reader(f1, delimiter='\t')
for group, rows in groupby(reader, itemgetter(0)):
best = max(rows, key=lambda r: (float(r[4]), float(r[2])))
print best

关于python - 如何按两行排序并打印具有最高值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30187339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com