prior={}
conditionProb={}
Counts={}
for i in range(len(trainingData)):
label=trainingLabels[i]
prior[label]+=1
datum=trainingData[i]
for j in range(len(datum)):
Counts[(i,j,label)]+=1
if(datum[j]>0):
conditionProb[(i,j,label)]+=1
当我运行这段代码时,它会报告一个键错误,因为之前没有先初始化所以值为0.我可以通过循环初始化这3个dict,但似乎放了太多代码来完成这项工作。所以我正在寻找其他方法来做到这一点,例如覆盖dict中的默认方法?我不熟悉python。任何想法都表示赞赏。
答案 0 :(得分:1)
您可以使用defaultdict
将密钥初始化为0
:
from collections import defaultdict
prior = defaultdict(lambda: 0)
conditionProb = defaultdict(lambda: 0)
Counts = defaultdict(lambda: 0)
for i, (label, data) in enumerate(zip(trainingLabels, trainingData)):
prior[label] += 1
for j,datum in enumerate(data):
Counts[i, j, label] += 1
if datum > 0:
conditionProb[i, j, label] += 1
答案 1 :(得分:0)
您可以使用collections模块中的defaultdict。你构造它传递那里的值类型,在这种情况下是一个int,加上一个默认值,如果它没有设置(默认为0)。这样做:
from collections import defaultdict
my_dict = defaultdict(int)
my_dict['foo'] += 2
答案 2 :(得分:0)
您可以使用Counter
:
>>> from collections import Counter
>>> c = Counter()
>>> c['a'] += 2
>>> c
Counter({'a': 2})