【问题标题】:How to sort similar values in a sorted list (based on second value) of tuples based on another value(third value) in the tuple in descending order如何根据元组中的另一个值(第三个值)按降序对元组的排序列表(基于第二个值)中的相似值进行排序
【发布时间】:2015-06-15 14:33:12
【问题描述】:

我有一个格式的元组列表

[("d",21,5),(e,21,4),("a",20,1),("b",20,3),("c",20,2 ),...]

其中第一个值(a、b、c 等)是唯一的,而元组中的其他两个值可能重复。(如 20)

我想根据元组中的第二个元素(这里是 20,21)按升序对列表进行排序,比如

[a,b,c,d,e]

然后我希望值基于相同的数字排序,例如 (a,b,c),其中基于 20 和 (d,e) 基于 21 排序基于第三个值(这里是 1,2,3, 4,5) 元组的降序排列,如

[b,c,a,d,e]

【问题讨论】:

    标签: python list sorting tuples


    【解决方案1】:

    如果您的原始列表如下所示:

    L = [("d",21,5),(e,21,4),("a",20,1),("b",20,3),("c",20,2),...]
    

    然后,您可以通过在 sort 函数中定义一个 2 元组键来按您想要的方式对其进行排序:

    L.sort(key=lambda t: (t[1],-t[2]))
    

    这确保列表按元组中的第二个元素排序,而平局被元组中第三个元素的否定值打破(即按第三个元素的降序排列)

    【讨论】:

    • 如果我还有另一个第四个值来打破第三个值的关系
    • @SatishP 然后将第四个值添加到键的末尾。
    • 如果您不必按降序排序,这将是operator.itemgetter 的完美使用。忽略降序,L.sort(key=operator.itemgetter(1, 2)) 超级快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2015-06-16
    • 1970-01-01
    • 2023-03-26
    • 2011-05-21
    相关资源
    最近更新 更多