python - 为合并的字典键提供综合分数
问题描述
我正在做一个需要说某个 ID 最有可能的项目。让我用例子来解释。我有 3 个字典,其中包含 ID 和他们的分数
例如:d1 = {74701:3、90883:2}
我这样分配百分比分数,
d1_p = {74701: 60.0, 90883: 40.0} ,这里的分数是(d1中键的值)/(值的总和)
同样,我还有 2 个其他词典
d2 = {90883: 2, 74701: 2} , d2_p = {90883.0: 50.0, 74701.0: 50.0}
d3 = {75853: 2}, d3_p = {75853: 100.0}
我的任务是为上述 3 个字典中的每个 ID 给出一个综合分数,然后通过取最高分来决定获胜者。我将如何在数学上为每个 ID 分配 0-100 之间的综合分数?
例如:在上述情况下,74701 需要成为明显的赢家。
我尝试给出平均值,但它失败了,因为我需要对出现在多个字典中的 ID 给予更多的偏好。例如:假设 74701 在 d1 和 d2 中占多数,有 30,40 个值。那么它的平均值将为 (30+40+0)/3 = 23.33 ,而 75853 仅出现一次且 100% 将得到 (100+0+0)/3 = 33.33 并将作为获胜者,这是错误的.
因此,有人可以在 python 中提出一种好的数学方法,并用代码给出这样的分数并决定多数吗?
解决方案
与其尝试从不同的字典创建全局分数,因为您的主要目标是分析频率,我建议将所有数据汇总到一个字典中,这通常不太容易出错。假设我有 3 个字典:
a = {1: 2, 2: 3}
b = {2: 4, 3: 5}
c = {3: 4, 4: 9}
您可以通过对每个键的值求和来将这三个字典汇总为一个:
result = {1: 2, 2: 7, 3: 9, 4: 9}
这可以通过使用轻松实现Counter
:
from collections import Counter
result = Counter(a)
result.update(Counter(b))
result.update(Counter(c))
result = dict(result)
这将产生所需的摘要。如果您想要每个字典的不同权重也可以以类似的方式完成,那么要点是您不应该尝试从字典中获取信息作为单独的实体,而是将它们合并为一个统计数据。
推荐阅读
- javascript - 将更新的元素从 JS 线程传递到 Shadow Thread
- c++ - 结构**我错过了什么?
- flask - Flask 在主模块外设置 @app 装饰器
- jena - tdb2.tdbcompact 命令行工具返回 Failed to get a lock: file
- javascript - 尝试使用 selenium 进行抓取时,我得到了“陈旧的元素引用”,我在需要时使用了“await”语句,但仍然出现错误
- python - dtype 对象的 Numpy 数组对于 sys.getsizeof() 和 nbytes 的值有很大不同
- javascript - 打字稿中的useContext和useReducer
- python - 将列表列表添加到熊猫数据框,其中列表的每个项目都是一个新列
- python - Pandas read_excel 无法读取 xls 但 xlrd 可以
- python - 从列表中找到一个公共数字并将其放在另一个列表中