Джанго: Разумно ли использовать объекты в качестве словарных ключей? - PullRequest
6 голосов
/ 12 августа 2011

Разумно ли использовать объекты в качестве ключей к словарю в django? Я так и сделал, и это работает. Но мне интересно, является ли это наилучшей практикой, или она будет создавать трудности, которые я сейчас не предвижу.

Я работаю над проектом, который касается образовательных стандартов. У меня есть словари со структурой по линии {Subject:[Standards]}. Модель для предмета выглядит примерно так:

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

  def __unicode__(self):
    return self.subject

Можно ли использовать объекты из этой модели в качестве ключей к моим словарям, или я должен использовать строковое представление, например Subject.subject?

Если это так, влияет ли метод Юникода на это? Когда я попытался использовать Subject.subject в качестве ключа, я получил что-то вроде {u'Math': [<Subject: Students can perform calculations.>]} Используя объекты в качестве ключей, это выглядит как {<Subject: Math>: [<Standard: Students can perform calculations.>]}

Это продолжение вопроса, который я задал вчера о , используя None в качестве словарного ключа .

Ответы [ 4 ]

10 голосов
/ 12 августа 2011

Изменяемые объекты не должны использоваться в качестве словарных ключей.Тем не менее, это работает, потому что базовый класс модели определяет __hash__ в терминах первичного ключа модели, который вряд ли изменится.Но я бы предпочел использовать ПК напрямую в качестве ключа.

3 голосов
/ 12 августа 2011

Зависит от того, как вы хотите их использовать. Я бы предложил более простой подход:

Ключи словарей могут быть первичными ключами Модели.

0 голосов
/ 12 августа 2011

Было бы лучше использовать строковое представление, так как, когда вам нужно будет выполнить поиск, вам нужно будет выписать все эти вещи, что будет непросто, плюс если в будущем вы захотите изменить свое представление в юникодеПридется искать способ переписать старый юникод для поиска.

Гудлак.

0 голосов
/ 12 августа 2011

Предполагая, что объекты реализуют хорошую хэш-функцию, я бы сказал, что нет ничего плохого в использовании объектов в качестве ключей, но это только мое личное мнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...