Python 寻找一种更有效地初始化dict的方法
当我运行此代码时,它将报告一个键错误,因为Previor没有首先初始化,所以值为0。我可以通过循环初始化这3个dict,但它似乎放了太多的代码来完成这项工作。因此,我正在寻找其他方法来实现这一点,例如,覆盖dict中的默认方法?我不熟悉python。欢迎您提出任何意见。您可以使用“收藏”模块中的defaultdict。构造它时,将传递其中的值类型,在本例中为int,如果未设置,则加上默认值(默认值为0)。这样做:Python 寻找一种更有效地初始化dict的方法,python,dictionary,Python,Dictionary,当我运行此代码时,它将报告一个键错误,因为Previor没有首先初始化,所以值为0。我可以通过循环初始化这3个dict,但它似乎放了太多的代码来完成这项工作。因此,我正在寻找其他方法来实现这一点,例如,覆盖dict中的默认方法?我不熟悉python。欢迎您提出任何意见。您可以使用“收藏”模块中的defaultdict。构造它时,将传递其中的值类型,在本例中为int,如果未设置,则加上默认值(默认值为0)。这样做: prior={} conditionProb={} Counts={} for
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
您可以使用:
您可以使用
defaultdict
将键初始化为0
:
>>> from collections import Counter
>>> c = Counter()
>>> c['a'] += 2
>>> c
Counter({'a': 2})
您也可以只使用
defaultdict(int)
>>> from collections import Counter
>>> c = Counter()
>>> c['a'] += 2
>>> c
Counter({'a': 2})
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