作为python项目的一部分,我需要开发一个快速有效的符号系统来对对象进行评分。简单解释一下,我有几个评级标准,我称之为A,B,C,C,D…每个标准的评分为满分10分。
作为值,表示要注意的值。
问题是:
因此,我开始使用JSON来使用evaluator方法对我的评分标准进行分组。
我的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‘对象不可迭代
发布于 2019-03-27 08:46:27
在这里,你描述的是一个“成本函数”,而不是一个“算法”。有时,当几个KPI被塞进一个没有单位的数字时,人们会把它称为“品质因数”或FoM。
可以将得分10分配给最高值(例如,售出的商品数量)或在某些情况下分配给最低值(number of
这没有什么意义,你需要“好”一致地对应,比如说,高值,然后“坏”对应低值。最简单的解决方法是用(10 - score)
翻转它,以获得“向后”的条件。一旦进行了分数调整,你就可以自由地放弃当前对较大/较小的跟踪。
我假设日期不会保持这种方式,而是会转换为一个数字,就像days_old
一样,它的处理方式与其他条件非常相似。
定义所有标准的权重,并计算加权总和。小菜一碟。从单位区间中选择权重,0 ..1,这可能是最方便的。权重不需要加到1.0,但当人类解释输入及其对输出的贡献时,这肯定会有所帮助。
类型错误:“int”对象不可迭代
evaluator, param = grades[key]
看起来你希望解开一个二元组,但是像7
一样,grades[key]
只是一个整数。get_grade_for_criterion()
函数需要注意返回格式正确的结果。
https://stackoverflow.com/questions/55367224
复制相似问题