将分数和权重分配给线段

时间:2019-01-21 02:24:18

标签: python

我需要检查来自不同表的一系列属性。总共大约有40个项目,例如

origin, age, amount, etc

我还没有真正找到收集数据的最佳方法,也许是从不同来源提取数据并创建字典

我为每个测试创建了一个函数。

def age(value):
    if value < 3:
        Score = 1
    elif 3 <= value < 5:
        Score = 7
    elif value >= 5:
        Score = 10
    else:
        Score = 10
    Weight = 5
    return (Score, Weight)

def origin(value):
    if value.upper() == "USA":
        Score = 1
    elif value.upper() == "JAPAN":
        Score = 1
    elif value.upper() == "CHINA":
        Score = 10
    elif value.upper() == "OTHER":
        Score = 7
    else:
        Score = 10
    Weight = 1
    return (Score, Weight)

我取值并附加到列表中

[[(7, 1)], [(1, 1)]]...

然后

## calling all 40 functions doesnt seem efficient
lst.append([age(4)])
lst.append([origin("JAPAN")])


score = [item[0][0] for item in lst]
weight = [item[0][1] for item in lst]
scoresum = (listsum(score))
weightsum = (listsum(weight))

total = scoresum/weightsum

有人知道更好的达成方式吗?我不知道,但是似乎必须有一个更好的方法

1 个答案:

答案 0 :(得分:1)

如果您坚持对元组求和,则可以使用以下技巧(取自this answer)简化该操作:

# Option 1
[sum(x) for x in zip(*lst)]

# Option 2
map(sum, zip(*l))

这将产生一个总和列表(例如[25, 32]),然后可以用来计算总和。

但是,您将需要一个简单的元组列表,因此您可能需要进行更改。该列表应类似于以下内容:

[(2, 1), (1, 1), ...]