我有一个问题,我必须创建一个将我的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]})
答案 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}