Python - 查找数组中最大的数字

Ale*_*exZ 1 python sorting math

好的 - 我陷入了两难境地.到目前为止,我的脚本将页面标题转换为类别 这是基于关键字,当匹配时,会添加一定的分数,即某些单词的值为10,有些仅为1.这会累积到每个类别的总分中.

[{15: [32, 'massages']}, {45: [12, 'hair-salon']}, {23,:[3, 'automotive service']}]
Run Code Online (Sandbox Code Playgroud)

索引是类别id,第一个值是得分第二个值类别.

在某些情况下,这超过了10个类别匹配.

我怎样才能将其过滤到前60-75%

即显然,按摩和美发沙龙是最重要的,因为它们远远超过汽车服务.但是,我们如何使用这种情报进行编程?

我以为stddev可以帮忙吗?

编辑

我试图过滤掉低得分项目,例如

data = [{15: [32, 'massages']}, {45: [1, 'hair-salon']}, {23:[1, 'automotive service']}]]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,按摩是唯一得分高的项目

data = [{15: [4, 'massages']}, {45: [2, 'hair-salon']}, {23:[1, 'automotive service']}]]
Run Code Online (Sandbox Code Playgroud)

Stil按摩

data = [{15: [10, 'massages']}, {45: [50, 'hair-salon']}, {23:[5, 'automotive service']}]]
Run Code Online (Sandbox Code Playgroud)

现在发廊(因为它远远高于其他人)

所以我不需要取第一个(N)对象,更多的是,第一个对象比其他数字高x,作为标准偏差的百分比或形式.

所以50比10和5高得多

10比3或2高很多

然而,9,8和6大致相同

srg*_*erg 6

这是一个使用的解决方案 heapq.nlargest()

import heapq

data = [{15: [32, 'massages']}, {45: [12, 'hair-salon']}, {23:[3, 'automotive service']}]

N = int(len(data) * 0.6 + 1)
print heapq.nlargest(N, data, key = lambda x: next(x.itervalues())[0])
Run Code Online (Sandbox Code Playgroud)

这打印:

[{15: [32, 'massages']}, {45: [12, 'hair-salon']}]
Run Code Online (Sandbox Code Playgroud)

编辑:如果你想要消除" 低得分项目 ",那么你需要通过" 低得分 " 来准确定义你的意思.

这里有一些代码完全随意定义"低分":如果分数低于最大值一个标准差,则分数很低:

import math

data = [{15: [32, 'massages']}, {45: [1, 'hair-salon']}, {23:[3, 'automotive service']}]

scores = [score for d in data for cat,(score,name) in d.iteritems()]
score_mean = sum(scores) / float(len(scores))
score_stdev = math.sqrt(sum(abs(s - score_mean)**2 for s in scores) / float(len(scores)))

print [d for d in data if next(d.itervalues())[0] > (max(scores) - score_stdev)]
Run Code Online (Sandbox Code Playgroud)

这打印:

[{15: [32, 'massages']}]
Run Code Online (Sandbox Code Playgroud)