【问题标题】:dictionary key error python字典键错误python
【发布时间】:2011-03-23 16:45:02
【问题描述】:

我收到错误“关键错误:'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   

一天是一个对象,它具有平均温度、最高温度等变量。Cat 是它将被放入的类别,例如“Fog”、“Rain”、“Snow”、“None”,f 是要检查的功能,例如'最高温度'

特征字典是在创建类时定义的。

【问题讨论】:

  • 以及其余的回溯?
  • @MattH 其余的回溯会破坏谜题

标签: python dictionary key


【解决方案1】:

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

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

【讨论】:

  • 这对我很有帮助。谢谢。
【解决方案2】:

dict.setdefault() 只设置密钥一次。如果您通过一次'tempMean',那么您将没有机会设置tempMax

【讨论】:

    【解决方案3】:

    方法的第一行

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多