Django:将对象用作字典键是否合理?

时间:2011-08-12 15:34:14

标签: python django dictionary key

在django中使用对象作为字典的键是否合理?我这样做了,它的确有效。但我想知道这是不是最佳做法,或者是否会造成我现在还没有预见到的困难。

我正在研究一个处理教育标准的项目。我的字典的结构与{Subject:[Standards]}一致。主题的模型看起来像:

class Subject(models.Model):
  subject = models.CharField(max_length=255, unique=True)

  def __unicode__(self):
    return self.subject

可以使用此模型中的对象作为我的词典的键,还是应该使用字符串表示,例如Subject.subject?

如果是这样,unicode方法会影响这个吗?当我尝试使用Subject.subject作为键时,我得到了{u'Math': [<Subject: Students can perform calculations.>]}使用对象作为键的内容,它看起来像{<Subject: Math>: [<Standard: Students can perform calculations.>]}

这是我昨天问过的关于using None as a dictionary key的问题的后续内容。

4 个答案:

答案 0 :(得分:10)

可变对象不应该真正用作字典键。也就是说,这是有效的,因为基础模型类根据模型的主键定义__hash__,这不太可能改变。但我更愿意直接使用pk作为关键。

答案 1 :(得分:3)

这取决于您想要如何使用它们。我建议采用一种更简单的方法:

字典的键可以是Model的主键。

答案 2 :(得分:-1)

假设对象实现了一个好的哈希函数,我会说使用对象作为键是没有错的,但这只是我个人的看法。

答案 3 :(得分:-1)

最好使用字符串表示,因为当你需要进行查找时,你需要写出所有这些东西,这将是一个痛苦,另外如果将来你想改变你的unicode表示你将不得不找到一种方法来重写旧的unicode做仰视。

古德勒克。