【问题标题】:Sorting with 2 keys and combining both用 2 个键排序并结合两者
【发布时间】:2013-02-28 05:10:59
【问题描述】:

我有一个名为“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')
...

我已将其作为列表列表读入,并且我知道如何根据第二列或第三列对该文件进行排序。到目前为止,我的脚本如下所示:

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)

我想做的是: 我想根据第二列对我的列表进行排序并保存排名。然后按照第三列排序,保存排名。这样最后我就可以根据两列中的排名对整个文件进行排序。明白我的意思了吗?

感谢大家的回答!!

【问题讨论】:

    标签: python list sorting python-3.x indexing


    【解决方案1】:

    通常您会使用tuple 或其他序列作为排序键,如下所示:

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

    在排序结束时,您将按第 2 列降序排列您的项目。如果第 2 列中的值相等,则将使用第 3 列的比较。

    【讨论】:

    • 不幸的是,这对我不起作用。第 3 列中的值(几乎)总是低于第 2 列中的值。它们不能直接相互比较。我真的要分别按照第2列和第3列排序。
    猜你喜欢
    • 1970-01-01
    • 2016-08-14
    • 2010-10-15
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2015-05-12
    • 1970-01-01
    相关资源
    最近更新 更多