用数字除dict(int)

2024-04-25 15:06:50 发布

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

我有个问题,我必须创建一个函数,把我的dict除以int。 这是我的口述:

Counter({1: [9, 10, 1], 2: [5, 1, 1, 2, 1, 1, 9, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 3, 4, 1, 1, 1, 3, 1, 4, 1, 1, 1, 1], 0: [1, 5, 1, 1, 2, 10, 1, 2, 1, 2, 2, 1, 1]})

这是我的职责:

^{pr2}$

这是一个函数,它将值(int)sommafreq求和:

def sommafrequenze(lista):
    sommafreq= sum(lista.values())
    return sommafreq

此指令给出了以下错误:不支持/:“dict_values”和“int”的操作数类型。。在

我想要的输出是:

Counter({1: [9/sommafreq, 10/sommafreq, 1/sommafreq], 2: [5/sommafreq, 1sommafreq, 1/sommafreq, 2/sommafreq, 1/sommafreq, 1/sommafreq, 9, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 3, 4, 1, 1, 1, 3, 1, 4, 1, 1, 1, 1], 0: [1, 5, 1, 1, 2, 10, 1, 2, 1, 2, 2, 1, 1]})

继续把所有的。。对不起,我的英语不好,先谢谢你!在

编辑:我以前的功能:

def ricercafrequenze(trainspam, testspam):
    filtratespam=Counter()
    filtratespam ={k:v for (k,v) in trainspam.items() if k in testspam}

    return filtratespam
    #main
def ricerchefrequenzeinlista(lista1,lista2):
    lista=Counter()
    i=0
    while i < len(lista2):
       lista[i]=(ricercafrequenze(lista1, lista2[i]))
       i+=1
    return lista

Counter({0: {'offer': 1, 'time': 5, 'discount': 1, 'one': 1, 'th': 2, 'subject': 10, 'special': 1, 'need': 2, 'price': 1, 'order': 2, 'product': 2, 'per': 1, 'today': 1}, 1: {'us': 9, 'subject': 10, 'buy': 1}, 2: {'time': 5, 'realist': 1, 'quickli': 1, 'give': 2, 'go': 1, 'thoma': 1, 'us': 9, 'let': 1, 'aruba': 1, 'natur': 1, 'b': 3, 'length': 1, 'ca': 1, 'one': 1, 'know': 2, 'life': 1, 'think': 1, 'girlfriend': 1, 'use': 2, 'stronger': 1, 'press': 1, 'longer': 1, 'fl': 1, 'po': 1, 'partner': 1, 'subject': 10, 'presid': 1, 'save': 1, 'nearli': 1, 'stud': 1, 'short': 1, 'everi': 3, 'gain': 1, 'citi': 1, 'product': 2, 'said': 1, 'increas': 1, 'month': 1, 'unit': 3, 'want': 4, 'must': 1, 'sex': 1, 'pleasur': 1, 'result': 3, 'matt': 1, 'name': 4, 'love': 1, 'bigger': 1, 'visitor': 1, 'oranjestad': 1}})

Tags: 函数returndefcounterdictintsubjectvalues
3条回答

你有两种可能:

1。使用numpy(因为dicts是lista值,这不适用):

    import numpy as np
    def probabilitacondizionata(lista, sommafreq):
        lista= {k: np.array(list(v)) / sommafreq for k, v in lista.items()}
        return lista

在 2使用听写理解:

^{pr2}$

正如评论中所提到的,你只需计算和,然后除以一个值就可以得到同样的结果。不管怎样,你可以这样划分每个元素:

Counter({k:[i/sommafreq for i in v] for k,v in lista.items()}) 

如果sommafrequenze函数专用于汇总初始列表的值-请使用以下简化方法:

def probabilitacondizionata(lista, sommafreq):
    lista = {k: [v / sommafreq for v in v] for k, v in lista.items()}
    return lista

l = {1: [9, 10, 1], 2: [5, 1, 1, 2, 1, 1, 9, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 3, 4, 1, 1, 1, 3, 1, 4, 1, 1, 1, 1], 0: [1, 5, 1, 1, 2, 10, 1, 2, 1, 2, 2, 1, 1]}
l_sum = sum(v for sublist in l.values() for v in sublist)

print(probabilitacondizionata(l, l_sum))

输出:

^{pr2}$

相关问题 更多 >