我有一本名为mark的python
词典:
marks={’joe’:4, ’suzan’:5, ’peter’:4, ’bob’:4, ’john’:6, ’ann’:5, ’fred’:3}
我想根据他们在该考试中的排名列出学生名单。更精确地,建立一个列表等级,使得:
rank[0]
包含最佳学生名单,rank[1]
包含次优学生等的列表。
输出应为:
[[’john’], [’ann’, ’suzan’], [’joe’, ’bob’, ’peter’], [’fred’]]
有人可以帮我吗?我正在尝试一段时间,但找不到任何简单的解决方案。
谢谢
python大神给出的解决方案
Python有一些很棒的内置库,例如itertools和operator。
这是一个班轮:
from itertools import groupby
from operator import itemgetter
marks = {'ann': 5, 'bob': 4, 'fred': 3, 'joe': 4, 'john': 6, 'peter': 4, 'suzan': 5}
print [[name for name, rank in g] for k, g in groupby(sorted(marks.iteritems(), key=itemgetter(1), reverse=True), key=itemgetter(1))]
我的实现主要基于示例here。