0

次のような「name_score_smiles.csv」というファイルがあります。

('VA00001', '64.11', '33.12', 'Cl.O=C1Nc2ccc(N)cc2C1')
('VA00002', '70.61', '54', 'CNCCC(=O)c1ccccc1')
('VA00003', '53.15', '57.76', 'O=c1[nH]c2cnccc2n1c1ccccc1')
('VA00004', '72.08', '41.82', 'CN1CCC(CC1)Nc1ccc(F)c(Cl)c1')
('VA00005', '67.11', '57.17', 'CCN1CCC(CC1)Nc1ccc(Cl)cc1')
('VA00006', '66.29', '48.66', 'O=C1Nc2cc3OCCOc3cc2C(C1)c1ccccc1')
('VA00007', '70.59', '40.31', 'C=CCC1(CCCCC1)NCCc1ccccc1')
('VA00008', '62.87', '43.29', 'Clc1cccc(CN2CCN(CC2)Cc2c[nH]c3ccccc23)c1')
('VA00009', '70.53', '27.3', 'Clc1cccc(CNCCc2c[nH]c3ccccc23)c1')
('VA00010', '67.15', '51.88', 'O=C(Nc1ccccc1)N1CCCCC1c1cccnc1')
...

私はそれをリストのリストとして読み、このファイルを2番目または3番目の列に従ってソートする方法を知っています。これまでの私のスクリプトは次のようになります。

with open('name_score_smiles.csv') as fin:
        lst = list(csv.reader(fin))

lst_20 = sorted(lst, key=lambda x:float(x[1]), reverse=True)

私がやりたいのはこれです:2番目の列に従ってリストをソートし、ランキングを保存したいと思います。次に、3番目の列に従って並べ替え、ランキングを保存します。最終的に、両方の列のランキングに従ってファイル全体を並べ替えることができます。私が何を意味するのかは明らかですか?

みなさん、ありがとうございました!!

4

1 に答える 1

2

通常、次tupleのようなもののソートキーとして a またはその他のシーケンスを使用します。

sorted(lst, key=lambda x: (float(x[1]),float(x[2])), reverse=True)

並べ替えの最後に、項目が列 2 の降順で並べられます。列 2 の値が等しい場合、列 3 の比較が使用されます。

于 2013-03-12T15:36:49.280 に答える