获取频率最高的项目及其对应的编号

Get maximum frequency item with its corresponding number

我有 ID 列表,例如 list1=[ID1, ID1, ID3, ID1, ID5, ID1],每个 ID 都有其对应的概率,例如 list2=[0.9, 0.92, 0.8, 0.91, 0.7, 0.9]。我想在 list1 中实现最大频率项,并将其与 list2 中的相应概率相加。例如 ID1:4(频率),3.63(求和概率) ID3:1(频​​率), 0.8(概率) ID5:1(频率),0.7(概率)

我可以通过以下代码获取频率:

from collections import Counter
counter_list = Counter(list1)
print("Voting of each predicted class", counter_list)

以上代码导致: [{ID1:4}, {ID3:1}, {ID5:1}] 它 return 我只有频率,但我不知道如何将第一个列表与第二个列表连接或在一个二维列表中损坏它们并取第一项计算频率,第二项计算增加概率柜台。我是 python 的新人,有人可以帮助我吗?

由于您需要两个列表中的项目,并且每个项目在两个列表中的位置相同,您可以使用 forzip 函数来迭代两个列表同一时间。示例:

for id_name, prob in zip(list1, list2):
    print(list1, list2)

为了保存计算重复次数和求和的结果字典,其中键是id,值是包含两个值的列表:第一个是id的计数,第二个是id的总和概率:

my_dict = {}
for id_name, prob in zip(list1, list2):
    if id_name not in my_dict:
        my_dict[id_name] = [0, 0]

    my_dict[id_name][0] = my_dict[id_name][0] + 1
    my_dict[id_name][1] = my_dict[id_name][1] + prob

最终结果是一个包含计数和概率求和的字典。

list1=['ID1', 'ID1', 'ID3', 'ID1', 'ID5', 'ID1']
list2=[0.9, 0.92, 0.8, 0.91, 0.7, 0.9]

d = {}
dict = {}
for x, y in zip(list1, list2):
    d.setdefault(x, []).append(y) # {'ID1': [0.9, 0.92, 0.91, 0.9], 'ID3': [0.8], 'ID5': [0.7]}
    dict[x] = (len(d[x]),sum(d[x])) # calculating frequency and probability for each key
print (dict)

输出:

{'ID1': (4, 3.63), 'ID3': (1, 0.8), 'ID5': (1, 0.7)}