作为python项目的一部分,我需要开发一个快速有效的符号系统来评估对象。简单解释一下,我有几个评级标准,我称之为A,B,C,C,D ...每个标准的得分均为10分。
我必须评估一个字典,该字典的关键是符号(A,B,C,D ......)的标准,以及值,要注意的值。
问题是:要评估的数据可以是几种类型:int / float / date。
得分10可以分配到最高值(例如销售的商品数量)或在某些情况下最低(订单取消数量)
每个评分标准都必须加权
算法必须经过优化,并且能够快速实时记录物体
所以我开始使用JSON将评分标准与评估者方法分组。
我的json文件:{
"A": {
"weighting": 2,
"graduation": {
"10": ["lesser_than_or_equal", 0],
"9": ["lesser_than_or_equal", 1],
"8": ["lesser_than_or_equal", 2],
"7": ["lesser_than_or_equal", 3],
"6": ["lesser_than_or_equal", 4],
"5": ["lesser_than_or_equal", 5],
"4": ["lesser_than_or_equal", 6],
"3": ["lesser_than_or_equal", 7],
"2": ["lesser_than_or_equal", 9],
"1": ["great_than", 10]
}
},
"B": {
"weighting": 3,
"graduation": {
"10": ["greater_than_or_equal", 10000000],
"9": ["greater_than_or_equal", 1000000],
"8": ["greater_than_or_equal", 100000],
"7": ["greater_than_or_equal", 10000],
"6": ["greater_than_or_equal", 1000],
"5": ["greater_than_or_equal", 100],
"4": ["greater_than_or_equal", 50],
"3": ["greater_than_or_equal", 30],
"2": ["greater_than_or_equal", 20],
"1": ["less_than", 20]
}
},
这是我的代码:class Notation(object):
def assign_notation(self, score, criterion='A'):
try:
grade = self.get_grade_for_criterion(self.fetchScoringSystem('scoringSystem.json'), criterion)
except Exception as exc:
logger.error('Impossible to retrieve the criteria scale '+criterion+' : ' + exc)
else:
grades = grade['graduation']
for key in sorted(grades, key=int, reverse=True):
evaluator, param = grades[key]
if self.__getattribute__(evaluator)(score, param):
return (int(key) * int(grade['weighting']))
else:
raise AttributeError
logger.error('Unable to access the function '+evaluator+' with the parameters '+ score + param)
def fetchGradingScale(self, infile):
import json
from collections import OrderedDict
with open(infile, 'r') as f:
data = json.load(f, object_pairs_hook=OrderedDict)
logger.info("Read file %s", infile)
return data
def greater_than_or_equal(self, score, x):
try:
return score >= x
except ValueError as exc:
logger.error('Error in values :' + exc)
def lesser_than_or_equal(self, score, x):
try:
return score <= x
except ValueError as exc:
logger.error('Error in values :' + exc)
目前,python返回以下错误:TypeError:'int'对象不可迭代
但是,我认为我的assign_notation方法效率不高,朋友告诉我有关bissect的优化算法。您是否已经构建了复杂的符号系统,如果没有,您是否有任何想法可以帮助我构建它?