我不能使用sorted函数按降序数字顺序对两个元素元组列表进行排序,然后按字母顺序升序排序

时间:2016-10-09 11:54:33

标签: python function sorting tuples

我使用sorted()函数对元组列表进行排序,如下所示。输出按第二个元素(数字)的需要降序排列。但我真正想要的是在一个平局的情况下按升序字母顺序对元组进行排序。

请帮助。

sorted(word_Count, key = itemgetter(1,0), reverse = True)

输出:

[('butter', 2), ('was', 1), ('the', 1), ('of', 1), ('but', 1),
('bought', 1), ('bitter', 1), ('bit', 1), ('betty', 1), ('a', 1)]

谢谢

2 个答案:

答案 0 :(得分:2)

您可以将sorted()功能与lambda一起用作:

>>> sorted(word_count, key=lambda x: (-x[1], x[0]))
[('butter', 2), ('a', 1), ('betty', 1), ('bit', 1), ('bitter', 1), ('bought', 1), ('but', 1), ('of', 1), ('the', 1), ('was', 1)]

我的lambda函数将元组作为(-x[1], x[0]))返回,表示按x[1]的降序对列表进行排序(-代表降序),如果匹配排序x[0]的升序(没有-符号表示升序)

答案 1 :(得分:0)

您可以使用list.sort两次,因为根据list.sort的文档字符串,它已经到位:

L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;

因此,要对列表进行排序,您可以

>>> word_count.sort()
>>> word_count.sort(key=lambda x: x[1], reverse=True)
>>> print(word_count)
[('butter', 2), ('a', 1), ('betty', 1), ('bit', 1), ('bitter', 1),
 ('bought', 1), ('but', 1), ('of', 1), ('the', 1), ('was', 1)]

请确保先按字母顺序排序,然后按照第二个键排序。