2016-12-04 165 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

你可以複製上面的那個,這是一樣的。 –