2016-04-19 67 views
0
UCI = {'A+': 4.0, 'A': 4.0,'A-': 3.7, 
     'B+': 3.3, 'B': 3.0,'B-': 2.7, 
     'C+': 2.3, 'C': 2.0,'C-': 1.7, 
     'D+': 1.3, 'D': 1.0,'D-': 0.7, 
     'F': 0.0} 

def top(student_info : {(str,str)}) -> {str}: 
    name_set = set() 
    for x in sorted(student_info, key = lambda x: x[0][-1], reverse = True):    
     print(x) 

top({('Alice','C'),('Bobby','B-'),('Carol','B-'),('David','D'),('Evelyn','C+')}) 

我想按照其級別從高到低的順序排列此集。但是,它沒有給我正確的順序。我得到的是:無法正確分揀集合

('Bobby', 'B-') 
('Evelyn', 'C+') 
('Carol', 'B-') 
('Alice', 'C') 
('David', 'D') 

任何幫助將不勝感激!謝謝

+0

也許你的意思是'鍵=拉姆達X:UCI [X [-1]'。 –

+0

你怎麼知道lambda x是什麼?我很難弄清楚它是什麼... –

回答

1

它的排序正確。您可以按元組中第一項中的最後一個字符進行排序。 key函數將被饋送單個元素,如('Alice', 'C')。因此x[0][-1]獲取第一個元素('Alice'),然後取最後一個字符('e')。輸出的順序相反。

你想要的是

lambda x: UCI[x[1]] 
+0

你怎麼知道lambda x是什麼?我很難弄清楚它是什麼...... –

+0

所以,x指的是密鑰之前的東西里面是什麼,這是「studnet_info」? –

1

我想你想要的是

>>> sorted(students, key = lambda x: UCI[x[1]], reverse=True) 
[('Carol', 'B-'), ('Bobby', 'B-'), ('Evelyn', 'C+'), ('Alice', 'C'), ('David', 'D')] 

你從來沒有在您的排序引用UCI。

在lambda中,x是元組(名稱,等級),所以x[0]是名稱,而x[1]是等級。您希望根據UCI中查找的等級的數值進行排序,因此這將是UCI[x[1]]

+0

你怎麼知道lambda x是什麼?我很難弄清楚它是什麼... –

+0

lambda的參數是來自正在排序的iterable的單個元素。如果你想排序'[{「foo」:「bar」},{「foo」:「baz」},{「foo」:「boff」}]'那麼'x'就是單個字典。如果您對'abcdefg'進行了排序,那麼'x'就是單個字符。 – sberry