开发者

Django: Is it reasonable to use objects as dictionary keys?

Is it reasonable to use objects as keys to a dictionary in django? I have done so and it works. But I am wondering if this is best practice, or if it is going to make difficulties I don't foresee right now.

I am working on a project which deals with educational standards. I have dictionaries with a structure along the lines of {Subject:[Standards]}. The model for subject looks something like:

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

  def __unicode__(self):
    return self.subject

Is it okay to use the objects from this model as keys to my dictionaries, or should I be using a string represenation, such as Subject.subject instead?

If so, does the unicode method affect this? When I tried using Subject.subject as the key, I got things like {u'Math': [<Subject: Students can perform calculations.>]} Using objects as keys, it looks like {<Subject: Math>: [<Standard: Students can perform calculations.>]}

This is a followup to a question I asked yesterday about using None as a 开发者_如何学运维dictionary key.


Mutable objects shouldn't really be used as dictionary keys. That said, this works because the base model class defines __hash__ in terms of the model's primary key, which is unlikely to change. But I would prefer to use the pk directly as the key.


It depends how you want to use them. I'd suggest a simpler approach though:

The keys of the dictionaries could be the Model's primary key.


Assuming the objects implement a good hash function I'd say that there's nothing wrong with using objects as keys, but that is just my personal opinion.


It would be better to use string representation since, when you will need to do looks up you will need to write out all that stuff, which will be a pain, plus if in the future you want to change your unicode representation you will have to find a way of rewriting the old unicode to do look ups.

Goodluck.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜