将数字除以数字(int)

时间:2016-11-13 08:55:08

标签: python dictionary int counter divide

我有一个问题,我必须创建一个将我的dict除以int的函数。 这是我的命令:

for each [x1[i] x2[i]] for i = 1:10

这是我的职责:

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

这是函数,它将值(int)sommafreq:

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

这条指令给了我这个错误:/:' dict_values'不支持的操作数类型。和' int' ..

输出我想是:

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

继续划分所有..抱歉我的英语不好,并提前致谢!

编辑:我之前的功能:

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

4 个答案:

答案 0 :(得分:0)

您有两种可能性:

<击> 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.使用 dict 理解:

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

答案 1 :(得分:0)

正如评论中所提到的,你可以只评估总和,然后除以一个值来实现同样的目的。无论如何,你可以划分每个元素:

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

答案 2 :(得分:0)

如果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))

输出:

{0: [0.007194244604316547, 0.03597122302158273, 0.007194244604316547, 0.007194244604316547, 0.014388489208633094, 0.07194244604316546, 0.007194244604316547, 0.014388489208633094, 0.007194244604316547, 0.014388489208633094, 0.014388489208633094, 0.007194244604316547, 0.007194244604316547], 1: [0.06474820143884892, 0.07194244604316546, 0.007194244604316547], 2: [0.03597122302158273, 0.007194244604316547, 0.007194244604316547, 0.014388489208633094, 0.007194244604316547, 0.007194244604316547, 0.06474820143884892, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.02158273381294964, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.014388489208633094, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.014388489208633094, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.07194244604316546, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.02158273381294964, 0.007194244604316547, 0.007194244604316547, 0.014388489208633094, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.02158273381294964, 0.02877697841726619, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.02158273381294964, 0.007194244604316547, 0.02877697841726619, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547, 0.007194244604316547]}

答案 3 :(得分:0)

我经常想在不使用字典理解的情况下做这种事情。 BetterDict是我的一个小项目,它扩展了Python dicts / Counters / defaultdicts / OrderedDicts,允许它们被合并,或者用于与标量或其他dicts的算术运算。 例如

>>> raw_counts = BetterDict({'the': 1432, 'she': 600, 'wookie': 25})
>>> total = 10000.
>>> relative_freqs = raw_counts / total
>>> print(relative_freqs)
{'she': 0.06, 'the': 0.1432, 'wookie': 0.0025}