【问题标题】:How can i sort a list of tuples by one of it's values and then the other? [duplicate]如何按其中一个值然后另一个值对元组列表进行排序? [复制]
【发布时间】:2017-05-26 23:42:46
【问题描述】:

我会直奔主题,我有这个:

    ocurrencias = [('quiero', 1), ('aprender', 1), ('a', 1), ('programar', 1), ('en', 1), ('invierno', 2), ('hace', 1), ('frio', 1), ('este', 1)]

我想按元组的第二个值排序,然后按它们的字符串值排序,然后打印每个元素来得到这个:

    output:invierno 2
           a 1
           aprender 1
           en 1
           este 1
           frio 1
           hace 1
           programar 1
           quiero 1

不知道我说得够不够清楚,但我不是很精通英语,所以请原谅我。

提前致谢

【问题讨论】:

    标签: python list python-3.x tuples


    【解决方案1】:

    使用sorted 与一个键,使每个元组的反转版本,以降序对第二个值进行排序,您可以在前面添加一个- 来否定该值:

    sorted(ocurrencias, key = lambda x: (-x[1], x[0]))
    # [('invierno', 2), ('a', 1), ('aprender', 1), ('en', 1), ('este', 1), ('frio', 1), ('hace', 1), ('programar', 1), ('quiero', 1)]
    

    正如@Jonathon 所评论的那样,这样做的原因是列表和元组比较按顺序进行,即比较第一个元素;如果不等于第二个元素,请在 python 中查看更多关于object comparison 的信息。

    【讨论】:

    • 比我的回答简单。很不错。值得指出的是,默认情况下,元组会比较第一个元素,然后是第二个元素,依此类推。
    • 感谢 Psidom!,我知道看起来我几乎没有进行任何研究,但我确实做了,而且我找到的答案都没有真正为我点击,将它添加到我开始学习 python 的事实中,因为我的第一语言,大约一周前,所以我仍然对它不知所措。
    • 这个答案很复杂:sorted(ocurrencias, key=lambda x: x[1], reverse=True)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多