自定义排序元组

Cod*_*ice 0 python sorting tuples

我正在尝试对元组列表进行排序(如果您必须知道,则为字典中的项目)。第一个元素是小写字母,第二个元素是整数。我想按第二个元素降序排序。为了打破平局,我将使用第一个元素的字母顺序。到目前为止我已经

sorted_c = sorted(c.items(), key=operator.itemgetter(1), reverse=True)
Run Code Online (Sandbox Code Playgroud)

这按我想要的每个元组的第二个元素排序。我该如何调整这个来打破联系?

输入示例:

[ ('b', 5), ('c', 10),('a', 27), ('a', 5) ]
Run Code Online (Sandbox Code Playgroud)

预期输出:

[('a', 27), ('c', 10), ('a', 5), ('b', 5) ]
Run Code Online (Sandbox Code Playgroud)

Moi*_*dri 5

为了对元组列表进行排序,您可以使用lambda 表达式作为排序函数的键,如下所示:

>>> my_list = [('a', 7), ('c', 10), ('b', 5), ('a', 5) ]
>>> sorted(my_list, key=lambda x: (-x[1], x[0]))
[('c', 10), ('a', 7), ('a', 5), ('b', 5)]
Run Code Online (Sandbox Code Playgroud)

解释:

lambda x: (-x[1], x[0])
#           ^      ^ sort in ascending order for value at `0`th index
#           ^ sort in descending order for value at `1`st index
Run Code Online (Sandbox Code Playgroud)

要将元组转换dict为元组列表,您需要调用dict.items()为:

>>> my_dict = {'a': 5, 'c': 10, 'b': 5}
>>> my_dict.items()
[('a', 5), ('c', 10), ('b', 5)]
Run Code Online (Sandbox Code Playgroud)