2016-09-28 53 views
-3
[(('A', 'B'), 1.0), (('A', 'C'), 1.0), (('B', 'C'), 1.0), (('B', 'D'), 1.0), (('D', 'E'), 1.0), (('D', 'F'), 1.0), (('E', 'F'), 5.0), (('F', 'G'), 5.0), (('D', 'G'), 1.0)] 

我需要的,如果在平局的情況下,我在字母排序元組的元組列表中的

最終名單應該是從小到大的順序排序中的數字降序排序此列表是這樣的:

[(('E', 'F'), 5.0),(('F', 'G'), 5.0), (('A', 'B'), 1.0),(('A', 'C'), 1.0),(('B', 'C'), 1.0),(('B', 'D'), 1.0),(('D', 'E'), 1.0),(('D', 'F'), 1.0) (('D', 'G'), 1.0)] 
+4

酷故事兄弟。 –

+1

downvote按鈕的懸停文本開始,「這個問題沒有顯示任何研究工作......」。對於任何回答的人:請不要[提要](https://stackoverflow.com/questions/39729526)[幫助吸血鬼](http://slash7.com/2006/12/22/vampires/)。 –

+0

[如何在堆棧溢出時提出問題](http://stackoverflow.com/help/how-to-ask) - 您應該可以閱讀它。這也許可以幫助你通過這個課程(只是得到答案),但你不會以這種方式獲得學位。 –

回答

6
sorted(a_list,key=lambda x:(-x[-1],x[0])) 

我猜...你應該作出努力,如果你真的想通過你的類...

0

下面的代碼可與字典和使用它的鍵做你的工作

testv = [(('A', 'B'), 1.0), (('A', 'C'), 1.0), (('B', 'C'), 1.0), (('B', 'D'), 1.0), (('D', 'E'), 1.0), (('D', 'F'), 1.0), (('E', 'F'), 5.0), (('F', 'G'), 5.0), (('D', 'G'), 1.0)] 
testv_dict = {} 
for element in testv: 
    if element[1] in testv_dict.keys(): 
     testv_dict[element[1]].append(element) 
    else: 
     testv_dict[element[1]] = [element] 
key_list = testv_dict.keys() 
key_list.sort(reverse=True) 
output_list = [] 
for key_i in key_list: 
    output_list.extend(testv_dict[key_i]) 
+2

這是過度設計的方式。 –

+0

這可能是其中的一部分...... –

+0

希望不要過分挑剔,但你應該依靠'key'參數來完成這些事情。此外,我會研究'defaultdictionary'這種成語,你的字典值將是另一個可能或不可能存在的容器。這將比這些檢查快得多。最後,'如果some_dict.keys()中的k是不必要的,你可以簡單地使用'if in some_dict' –

2

這並不像你一樣Joran的解決方案,但由於Timsort是穩定的,你可以進行排序兩次

>>> my_list = [(('A', 'B'), 1.0), (('A', 'C'), 1.0), (('B', 'C'), 1.0), (('B', 'D'), 1.0), (('D', 'E'), 1.0), (('D', 'F'), 1.0), (('E', 'F'), 5.0), (('F', 'G'), 5.0), (('D', 'G'), 1.0)] 
>>> sorted(sorted(my_list, key = lambda t:t[0]), key = lambda t:t[1],reverse=True) 
[(('E', 'F'), 5.0), (('F', 'G'), 5.0), (('A', 'B'), 1.0), (('A', 'C'), 1.0), (('B', 'C'), 1.0), (('B', 'D'), 1.0), (('D', 'E'), 1.0), (('D', 'F'), 1.0), (('D', 'G'), 1.0)] 
>>>