我想要排序,比方说,这个列表:
[('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. echo在foxtrot之前,因为echo有更大的数字,foxtrot在探戈之前,尽管他们有相同的数字,因为f在t之前。
目前,我的方法涉及到for循环(查看每个元素)中的while循环(将项目移动到正确的位置),然后是另一个循环,如果数字相同,则执行相同的操作,以便按字母顺序排序。
有没有更好的方法呢?
发布于 2019-12-04 03:11:06
您可以编写自己的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)]https://stackoverflow.com/questions/59163820
复制相似问题