python - 对对象字典进行排名的最佳方法是什么?
问题描述
给定以下类:
class Comparison():
def __init__(self, value):
self.value = value
self.rank = 0
class Comparisons(dict):
def __init__(self):
super(Comparisons, self).__init__()
def rank(self):
# Method to examine each Comparison instance and
# assign Comparison.rank based on Comparison.value
rank()
该方法检查对象并分配等级的有效方法是什么?例如:
comparisons = Comparisons()
# store some Comparison instances
comparisons['one'] = Comparison(10)
comparisons['two'] = Comparison(5)
comparisons['three'] = Comparison(1)
# function to rank the comparisons
comparisons.rank()
print(comparisons['one'].rank)
print(comparisons['two'].rank)
print(comparisons['three'].rank)
回报:
3
2
1
如果该rank()
方法可以处理关系,那将更加有益。
解决方案
这看起来像最直观(天真?)的方式:
def rank(self):
sorted_comparisons = sorted(self.values(), key=lambda c: c.value)
for rank, comparison in enumerate(sorted_comparisons, 1):
comparison.rank = rank
推荐阅读
- javascript - Javascript中异步函数的困惑
- git - 现有的 git(私人远程)仓库已经存在。无法与之前的开发者取得联系
- solr - 同时更新多个 solr 服务器
- javascript - Service Worker 是否应该在每次重新加载页面或导航到不同页面时自行安装?
- reactjs - Reducer 以意想不到的方式被调用 - Redux Saga
- docker - Docker:根据环境变量编辑 docker-entrypoint.sh
- python - 如何从所选键再次迭代python dict?
- angular - 错误:无法匹配任何路由。延迟加载 Angular 辅助路由时
- c# - Razor Pages 表格列表的可重用表单模式
- java - 寻找与 JavaScriptSerializer 等效的 Java