寻求一种以更有效的方式初始化dict的方法

时间:2016-06-02 10:08:06

标签: python dictionary

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。任何想法都表示赞赏。

3 个答案:

答案 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})