根据python中的2个条件对元组列表进行排序

时间:2016-11-20 17:56:28

标签: python list sorting

我想对这个元组列表进行排序,首先是整数的值,然后是每个元组中字符串的长度,但不知道如何去做。

[(10,'ATAGCTAT'),(4,'TTAGCTA'),(6,'AATTAATCGAT'),(6,'GCTATAGC')]

4 个答案:

答案 0 :(得分:2)

尝试

sorted(s, key=lambda v: (v[0], len(v[1]), v[1]))

这使用key的{​​{1}}参数创建一个新元组,其中包含您要根据需要排序的信息。

请注意,我将实际字符串作为元组中的第三个值包含在内,以便仅为第一个值和字符串长度打破关系。如果你愿意,你可以删除它。

对于你的例子,那就是

sorted()

答案 1 :(得分:1)

使用整数值的元组和字符串项的长度排序:

In [1]: s = [(10, 'ATAGCTAT'), (4, 'TTAGCTA'), (6, 'AATTAATCGAT'), (6, 'GCTATAGC')]

In [2]: sorted(s, key=lambda v: (v[0], len(v[1]), v[1]))
Out[2]: [(4, 'TTAGCTA'), (6, 'GCTATAGC'), (6, 'AATTAATCGAT'), (10, 'ATAGCTAT')]

答案 2 :(得分:0)

使用使用所需条件的自定义排序键:

{
    "survey_id": "111237200",
    "collector": {
        "send": true,
        "recipients": [{
            ...
        }]
    },
    "email_message": {
        "subject": "Ice and Fire event",
        "reply_email": "sunil@ljhjhjk.com"
    }
}

答案 3 :(得分:0)

您可以使用sorted()函数并根据排序条件将参数传递给密钥。

以下教程提供了sorted()函数的不同示例。

https://docs.python.org/3.5/howto/sorting.html#sortinghowto

<强>解决方案:

>>> mylist = [(10, 'ATAGCTAT'), (4, 'TTAGCTA'), (6, 'AATTAATCGAT'), (6, 'GCTATAGC')]

>>> sorted(mylist, key=lambda val: (val[0], len(val[1])))
[(4, 'TTAGCTA'), (6, 'GCTATAGC'), (6, 'AATTAATCGAT'), (10, 'ATAGCTAT')]