Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:使用对象作为字典键合理吗?_Python_Django_Dictionary_Key - Fatal编程技术网

Python 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

在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':[]}
的东西,它看起来像
{:[]}


这是我昨天问的一个问题的后续问题。

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

最好使用字符串表示,因为,当您需要进行查找时,您需要写出所有这些内容,这将是一件痛苦的事情,此外,如果将来您想要更改unicode表示,您必须找到一种方法重写旧的unicode来进行查找


祝你好运。

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

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


字典的键可以是模型的主键。

这是否像
def\uuuu hash\uuuu(self):返回self.id那样简单?如果是这样的话,为什么需要明确这一点?或者你的意思是我应该将我的字典定义为
{subject.id:[standard.id]}
?这与Alexandru的回答有相同的想法,但更具体一点。