你myarr结合这里看起来并不像有效的Python代码(和我的翻译会话不执行
渲染成:
myarr = {
'Richard': 1,
'Reuben': 4,
'Reece': 0,
'Rohan': 3,
'Ralph': 2,
'Raphael': 0,
'Robin': 0 }
让我上我的东西可以基于一个答案
在Python中进行自定义排序的推荐方法是使用DSU(装饰,排序,undecorate)模式 如果你想通过值排序字典,那看起来像如:
keys_sorted_by_val = [ x[1] for x in sorted([(v,k) for k,v in myarr.items()])]
...其中(v,k) for k,v in myarr.items()是装饰的表达; sorted()显然是分类而外部x[1] for x in ...是最后的undecorate步骤。
显然,这似乎是一个足够的共同要求,即人们可能要在一个函数包装这件事:
def dict_by_values(d):
return [ x[1] for x in sorted([(v,k) for k,v in d.items()])]
如果你有,你要排序的某些属性可以对象实例的集合使用这样的事情:
def sort_by_attr(attr, coll):
results = list()
for each in coll:
assert hasattr(each, attr)
results.append((getattr(each, attr), each))
results.sort()
return [x[1] for x in results]
因此,如果我们创建了一个类代表这样你的名字/排名数据:
class NameRanking(object):
def __init__(self, name, rank):
self.name = name
self.rank = rank
def __repr__(self):
return "%s: %s, %s" %(self.__class__, self.name, self.rank)
...和使用myarr实例人的名单:
name_rankings = [NameRanking(K,V)对K,V在myarr.items()]
......那么,我们可以得到在使用的排序副本:
names_rankings_by_rank = sort_by_attr('rank', name_rankings)
(是的assert是不是在这里是个好主意;那就是你将自己的异常处理或适当的代码投入你的应用程序)。