首页 > 解决方案 > 有没有办法对元组列表进行排序?

问题描述

我想对这个列表进行排序:

[('alpha', 2), ('delta', 3), ('charlie', 3), ('tango', 1), ('foxtrot', 1), ('echo', 2)]

结果应该是

[('charlie', 3), ('delta', 3), ('alpha', 2), ('echo', 2), ('foxtrot', 1), ('tango', 1)]

charlie 排在第一位是因为它的数字最大,并且领先于 delta,因为 c 按字母顺序排在 d 之前(因此,如果数字相同,它将按字母顺序对这些特定的数字进行排序)。alpha 在 echo 之前,因为即使它们具有相同的数字,a 按字母顺序排在 e 之前。echo 领先于 foxtrot,因为 echo 具有更大的数字,而 foxtrot 领先于 tango,即使它们具有相同的数字,因为 f 在 t 之前。

目前,我的方法涉及一个 for 循环(查看每个元素)内部的 while 循环(将项目移动到正确的位置),然后如果数字相同,则另一个循环执行相同的操作,因此它可以按字母顺序排序.

有没有更好的方法来做到这一点?

标签: pythonpython-3.xlistsortingtuples

解决方案


您可以编写自己key的传递给sorted. 在这种情况下,首先按[1]索引排序,但将其取反,以便获得降序。然后按名称按字母升序排序,即 index [0]

>>> sorted(values, key=lambda i: (-i[1], i[0]))
[('charlie', 3), ('delta', 3), ('alpha', 2), ('echo', 2), ('foxtrot', 1), ('tango', 1)]

推荐阅读