Python 寻找一种更有效地初始化dict的方法

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

当我运行此代码时,它将报告一个键错误,因为Previor没有首先初始化,所以值为0。我可以通过循环初始化这3个dict,但它似乎放了太多的代码来完成这项工作。因此,我正在寻找其他方法来实现这一点,例如,覆盖dict中的默认方法?我不熟悉python。欢迎您提出任何意见。

您可以使用“收藏”模块中的defaultdict。构造它时,将传递其中的值类型,在本例中为int,如果未设置,则加上默认值(默认值为0)。这样做:

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