2011-03-23 136 views
3

我得到錯誤「Key Error:'tempMax'」。字典鍵錯誤python

誰能告訴問題是用下面的代碼是什麼:

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'

特徵字典是在創建類時定義的。

+0

和其餘的追溯? – MattH 2011-03-23 16:48:49

+0

@MattH其餘的追蹤將破壞*謎語* – joaquin 2011-03-23 17:04:55

回答

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'] = {} 
+0

這真的幫了我。謝謝。 – 2012-04-04 11:14:18

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

dict.setdefault()只設置密鑰一次。如果您通過'tempMean'一次,那麼您將無法設置tempMax