3

私はPython初心者です。数時間グーグルで検索し、 stackoverflow を検索した後、問題の解決策を見つけることができませんでした:

外部スクリプトを使用して、分子の活動に関する情報を含むファイルを読み取ります。読み取られると、データは次の形式のリストになります。

INACT67481 -10.84

つまり、分子の名前とその活性値が 1 つのスペースで区切られています。分子の名前の長さは大きく異なります。

ここで、問題は、各分子が複数 (最大 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
CHEMBL16781.smi
14.401

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 に答える