字典键错误python

时间:2011-03-23 16:45:02

标签: python dictionary key

我收到错误“Key Error:'tempMax'”。

任何人都可以通过以下代码说出问题所在:

def catagorise(self, day, cat, f):
    self.features.setdefault(cat, {f:{'high':0,'mid':0,'low':0}})

    if f == 'tempMean':
        if day.tempMean > 15.0:
            self.features[cat][f]['high'] += 1
        elif day.tempMean > 8.0 and day.tempMean < 15.0:
            self.features[cat][f]['mid'] += 1
        elif day.tempMean <= 8.0:
            self.features[cat][f]['low'] += 1       

    if f == 'tempMax':
        if day.tempMax > 15.0:
            self.features[cat][f]['high'] += 1
        elif day.tempMax > 8.0 and day.tempMax < 15.0:
            self.features[cat][f]['mid'] += 1
        elif day.tempMax <= 8.0:
            self.features[cat][f]['low'] += 1   

一天是一个具有变量的对象,例如平均温度,最高温度等。猫是它将被放入的类别,例如'雾','雨','雪','无',f是要检查的功能,例如'tempMax'

在创建类时定义了要素字典。

3 个答案:

答案 0 :(得分:4)

问题出在setdefault调用中。 f设置为tempMax但从未初始化tempMax。 在这种情况下,它需要初始化为字典,因为你有'高'作为键

self.features[cat][f]['high']


self.features[cat]['tempMax'] = {}

如果你来自php背景,那么这是一个常见的错误。在python中,你必须初始化你的词典。它们必须在每个嵌套级别进行初始化。 通常的做法是......

try:
   self.features[cat]
except KeyError, e:
   self.features[cat] = {}

try
   self.features[cat]['tempHigh']
except KeyError, e:
   self.features[cat]['tempHigh'] = {}

答案 1 :(得分:1)

dict.setdefault()仅设置密钥一次。如果您通过'tempMean'一次,则无法设置tempMax

答案 2 :(得分:0)

方法的第一行

self.features.setdefault(cat,{f:{'high':0,'mid':0,'low':0}})

仅当self.features[cat]尚未设置时才将self.features[cat]设置为给定值,否则不执行任何操作。在后一种情况下,字典f可能会发生(并且显然会发生)字典self.features[cat][f],因此尝试访问KeyError会引发{{1}}。