使用模型字段作为字典键,但它将其作为默认值读取?

时间:2015-07-22 21:48:48

标签: python dictionary key default

我有一个字典定义为

BREED_CLASS = {
    'bdcl': ['Border Collie', BreedBdcl, 'BreedBdcl'],
}

和定义为

的模型
class Dog(models.Model):
    breed_code = models.CharField(max_length=4, default='')

我正在尝试使用breed_code作为键来访问字典中的项目,例如像

return BREED_CLASS[instance.breed_code][0]

但是会引发KeyError,异常值''也就是默认值。

我尝试过像

这样的事情
bc = instance.breed_code

并正确返回保存到该实例化对象('bdcl')的值。但是当我把它放入字典访问时就这样了

    return BREED_CLASS[bc][0]

它使我获得了具有相同确切异常值的完全相同的KeyError。我怎么知道这个?

2 个答案:

答案 0 :(得分:0)

CharField类似乎使用__str__魔术方法在打印时返回一个字符串,给你一个错觉,它是一个字符串但它实际上是一个对象。您的字典使用实际字符串来存储值,但是当您使用BREED_CLASS[instance.breed_code]时,您将传递对象。将对象转换为字符串应该修复它。试试这个:

BREED_CLASS[str(instance.breed_code)][0]

答案 1 :(得分:0)

所以我想出了一个解决方法,让我得到了我想要的东西,但我不知道它为什么会起作用。

这本身不起作用

(mask & (1 << bitIndex)) != 0

但是这个for循环遍历了密钥

return BREED_CLASS[instance.breed_code][2]

请注意,两个返回调用都是相同的,其中instance.breed_code用于dict键索引。 有没有人对这是为什么有答案?