2016-01-14 50 views
0

我给出的名字和成绩的数组,我想从最高到最低的等级排序,按以下格式打印出来:我已经写了一些Python的数组排序

排名姓名

基于给出的数组的代码,但我现在卡住了。任何帮助都是极好的。由于

grade = {"Nick": 90, "Josh": 80, "Jon" : 70, "David": 100, "Ed": 60, "Kelly": 50} 

numerical_grades = grade.values() 

ranking = sorted(numerical_grades, reverse = True) 
rank=0 
print ranking 
print "%-8s%-10s%-2s" % ("Rank", "Name", "Grade") 

for number_grade in numerical_grades: 
    for name in grade: 
+2

可能的复制http://stackoverflow.com/questions/613183/sort-a-python-dictionary-by-value – HabibKazemi

+0

您的代码中没有任何数组。 Python本身没有数组(只有列表)。你有什么是字典(字典)。 – Daenyth

回答

1

您可以使用下列内容:

import operator 
grade = {"Nick": 90, "Josh": 80, "Jon" : 70, "David": 100, "Ed": 60, "Kelly": 50} 
sorted_grades = [(rank, x[0], x[1]) for rank, x in enumerate(sorted(grade.items(), key=operator.itemgetter(1), reverse=True), 1)] 
print(sorted_grades)) 

输出

[(1, 'David', 100), (2, 'Nick', 90), (3, 'Josh', 80), (4, 'Jon', 70), (5, 'Ed', 60), (6, 'Kelly', 50)] 

稍微简洁版(带字典输出)如下:

sorted_grades = dict(enumerate(sorted(grade.items(), key=operator.itemgetter(1), reverse=True), 1)) 
print(sorted_grades) 

输出

{1: ('David', 100), 2: ('Nick', 90), 3: ('Josh', 80), 4: ('Jon', 70), 5: ('Ed', 60), 6: ('Kelly', 50)} 
0

你可以排序的整个字典和简单地遍历它算账:

>>> import operator 
>>> grade = {"Nick": 90, "Josh": 80, "Jon" : 70, "David": 100, "Ed": 60, "Kelly": 50} 
>>> sorted_by_grade = sorted(grade.items(), key=operator.itemgetter(1))[::-1] 
>>> list(enumerate(sorted_by_grade)) 
[(0, ('David', 100)), (1, ('Nick', 90)), (2, ('Josh', 80)), (3, ('Jon', 70)), (4, ('Ed', 60)), (5, ('Kelly', 50))] 
+0

用户想要打印“等级”,“名称”和“等级”。 – gtlambert

+0

@ lambo477好点,谢谢。固定。 –

+1

为什么[:: - 1]而不是rev​​erse = True? –

0
sorted_grades = [(grade[name], name) for name in grades] 
sorted_grades.sort(reverse=True) 
for n, grade in enumerate(sorted_grades): 
    print(n+1, grade[1], grade[0] 

这将使用列表理解创建一个元组列表,(grade, name)。然后您可以使用pythons排序功能将列表从最高排序到最低排序。 for循环中的print语句产生您看起来想要的输出。

+3

只要你知道,你可以在'enumerate'函数中输入一个起始号码。你可以跳过'n + 1'部分。 – Exelian

+0

@Exelian从来没有遇到过。谢谢(你的)信息。 –