2016-12-04 132 views
-1

我在尝试排序元组列表(如果您必须知道,这些元组的列表项)。第一个元素是小写字母,第二个元素是整数。我想按降序排列第二个元素。要打破关系,我会使用第一个元素的字母顺序。到目前为止,我有自定义排序元组

sorted_c = sorted(c.items(), key=operator.itemgetter(1), reverse=True) 

这按每个元组的第二个元素排序,因为我想要的。我如何调整这个打破关系?

示例输入:

[ ('b', 5), ('c', 10),('a', 27), ('a', 5) ] 

预期输出:

[('a', 27), ('c', 10), ('a', 5), ('b', 5) ] 
+0

又该*破领带*给在这种情况下?有一些输入示例和预测/预期输出? – RomanPerekhrest

+0

类似于:'sorted_c = sorted(c.items(),key =(operator.itemgetter(1),int(operator.itemgetter(0)),reverse = True)'也许? –

+0

@ Jean-FrançoisFabre不'key'必须可以调用吗? –

回答

2

为了排序的元组的列表,则可以使用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)] 

说明:

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 

转换用的dict列出的元组,你需要调用dict.items()为:

>>> my_dict = {'a': 5, 'c': 10, 'b': 5} 
>>> my_dict.items() 
[('a', 5), ('c', 10), ('b', 5)] 
+0

这看起来像它我没有考虑否定整数为了获得反向排序,同时保持字母的字母顺序 –

+0

@ Jean-FrançoisFabreAww ...你删除了你的例子,我可以用它来解决我的问题编辑噢,好吧,我可以自己做个例子。 –

+0

你可以复制上面的那个,这是一样的。 –