元组列表中的多数及其平均值

2024-04-20 05:16:35 发布

您现在位置:Python中文网/ 问答频道 /正文

假设下面的元组列表表示来自3种不同方法的情绪估计:

[('pos', 0.2), ('neu', 0.1), ('pos', 0.4)]

我想知道什么是找到多数人情绪的最有效方法,并以此计算其平均值,即:

^{pr2}$

谢谢


Tags: 方法pos列表平均值元组情绪neupr2
3条回答
import itertools

l = [('pos', 0.2), ('neu', 0.1), ('pos', 0.4)]

你可以先按情绪分组(注意需要先排序)

^{pr2}$

然后找出哪种情绪是最常见的(aka拥有最长的群体)

majority = max(sentiments, key=len)
# majority = [('pos', 0.2), ('pos', 0.4)]

最后计算平均值

values = [i[1] for i in majority]
average = (majority[0][0], sum(values)/len(values))
# average = ('pos', 0.30000000000000004)

使用^{}^{}模块可以执行以下操作:

from collections import Counter
from statistics import mean

lst = [('pos', 0.2), ('neu', 0.1), ('pos', 0.4)]
count = Counter(item[0] for item in lst)  # Counter({'pos': 2, 'neu': 1})
maj = count.most_common(1)[0][0]          # pos
mn = mean(item[1] for item in lst if item[0] == maj)
result = (maj, mn)

print(result)  # ('pos', 0.30000000000000004)

虽然考虑到你在寻找效率,我更喜欢CoryKramer's answer。在

import collections

reports = [('pos', 0.2), ('neu', 0.1), ('pos', 0.4)]

oracle = collections.defaultdict(list)
for mood, score in reports:
    oracle[mood].append(score)

counts = {mood: len(scores) for mood, scores in oracle.items()}

mood = max(counts) # gives `'pos'`

sum(oracle[mood]) / len(oracle[mood]) # gives 0.3

相关问题 更多 >