我想对这个列表进行排序:
[('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,因为即使它们具有相同的数字,也按字母顺序位于e之前。回声在foxtrot的前面,因为回声的数目更大,而foxtrot在数目上相同,因为f在t之前,所以在探戈的前面。
目前,我的方法涉及for循环(查看每个元素)中的while循环(将项目移至正确的位置),然后再进行另一个循环,如果数字相同,则执行相同的操作,因此可以按字母顺序排序。
有更好的方法吗?
答案 0 :(得分:1)
您可以编写自己的key
传递给sorted
。在这种情况下,请先按[1]
索引进行排序,然后将其取反,以便获得降序排列。然后按名称升序按字母顺序排序,即索引[0]
。
>>> sorted(values, key=lambda i: (-i[1], i[0]))
[('charlie', 3), ('delta', 3), ('alpha', 2), ('echo', 2), ('foxtrot', 1), ('tango', 1)]