Skip to main content
 首页 » 编程设计

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

2025年05月04日10mengfanrong

好的 - 我有一个难题。到目前为止,我的脚本将页面标题转换为类别。这是基于关键字的,当有匹配时会加上一定的分数,即有些词的值为 10,有些只有 1。这会累积到每个类别的总分中。

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

Index是类别id,首先是分数,第二是类别。

在某些情况下,这会跨越 10 个以上的类别匹配项。

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

很明显,按摩和美发沙龙是最多的,因为它们远远高于汽车服务。但是如何对我们使用的这种智能进行编程?

我在想 stddev 能帮上忙吗?

编辑

我正在尝试过滤掉得分较低的项目,例如

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

按摩是这个实例中唯一的高分项目

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

静力按摩

data = [{15: [10, 'massages']}, {45: [50, 'hair-salon']}, {23:[5, 'automotive service']}]] 

现在美发沙龙(因为它远高于其他)

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

所以 50 比 10 和 5 高得多

10 比 3 或 2 高得多

但是9、8和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]) 

这打印:

[{15: [32, 'massages']}, {45: [12, 'hair-salon']}] 

编辑:如果您想消除“低分项”,那么您需要准确定义“低分”的含义.

这里有一些代码采用了完全任意的“低分”定义:如果分数低于最大值一个标准差以上,则分数较低:

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)] 

这打印:

[{15: [32, 'massages']}]