3

我是 Python 菜鸟。经过几个小时的谷歌搜索和搜索 stackoverflow ,我未能找到解决问题的方法:

我使用外部脚本来读取包含分子活动信息的文件。读取数据后,数据将以下列形式出现在列表中:

INACT67481 -10.84

也就是说,分子的名称和它的活性值,用一个空格分隔。分子名称的长度变化很大。

现在,问题是,每个分子可能有多个(最多 n 个)值,并且只应保留最高值,同时确保顺序不会改变(除了删除具有较小值的重复项)。

在诸如thisthis之类的线程的帮助下,我知道如何简单地删除重复项,但是对于如何仅删除具有最小值的那个而不诉诸可怕的循环混乱,我感到很迷茫。

编辑:我也可以在 python 中重写文件解析脚本,如果有不同形式的数据会更容易。

EDIT: Sample data:
CHEMBL243059.smi 11.75
CHEMBL115092.smi 10.49
CHEMBL244771.smi 10.79
CHEMBL471221.smi 10.78
CHEMBL573301.smi 10.77
CHEMBL469583.smi 10.77
CHEMBL115092.smi 10.97
CHEMBL244771.smi 8.95
CHEMBL16781.smi 10.76
CHEMBL440776.smi 10.76
CHEMBL243059.smi 10.75
CHEMBL115092 .smi 10.69

应该返回:

CHEMBL243059.smi 11.75
CHEMBL244771.smi 10.79
CHEMBL471221.smi 10.78
CHEMBL573301.smi 10.77
CHEMBL469583.smi 10.77
CHEMBL115092.smi 10.97
CHEMBL1678174076 10.7610
CHEMBL.

4

1 回答 1

2
from collections import OrderedDict

D = OrderedDict()

with open("fin.txt") as fin:
    for line in fin:
        if line.isspace():   # Guard against empty lines
            continue
        molecule, sep, activity = line.partition(" ")
        activity = float(activity)
        if molecule in D:
            if activity > D[molecule]:
                D[molecule] = activity
                D.move_to_end(molecule)
        else:
            d[molecule] = activity
于 2013-06-11T10:18:57.220 回答