Python Django:使用对象作为字典键合理吗?
在django中使用对象作为字典的键是否合理?我已经这样做了,而且效果很好。但我想知道这是否是最佳实践,或者这是否会造成我目前无法预见的困难 我正在做一个关于教育标准的项目。我有一些结构类似于Python Django:使用对象作为字典键合理吗?,python,django,dictionary,key,Python,Django,Dictionary,Key,在django中使用对象作为字典的键是否合理?我已经这样做了,而且效果很好。但我想知道这是否是最佳实践,或者这是否会造成我目前无法预见的困难 我正在做一个关于教育标准的项目。我有一些结构类似于{Subject:[Standards]}的字典。主题的模型类似于: class Subject(models.Model): subject = models.CharField(max_length=255, unique=True) def __unicode__(self): re
{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':[]}
的东西,它看起来像{:[]}
这是我昨天问的一个问题的后续问题。假设对象实现了一个好的哈希函数,我会说使用对象作为键没有什么错,但这只是我个人的观点。最好使用字符串表示,因为,当您需要进行查找时,您需要写出所有这些内容,这将是一件痛苦的事情,此外,如果将来您想要更改unicode表示,您必须找到一种方法重写旧的unicode来进行查找
祝你好运。可变对象不应该真正用作字典键。这就是说,这是因为基本模型类根据模型的主键来定义
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,而主键不太可能更改。但是我更愿意直接使用pk作为键。这取决于您想如何使用它们。不过,我建议采用一种更简单的方法:
字典的键可以是模型的主键。这是否像
def\uuuu hash\uuuu(self):返回self.id那样简单?如果是这样的话,为什么需要明确这一点?或者你的意思是我应该将我的字典定义为{subject.id:[standard.id]}
?这与Alexandru的回答有相同的想法,但更具体一点。