Дизайн хэш-таблицы Python

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

например, давайте рассмотрим, у нас есть три значения: document_id, оценка и ранг. Существует класс "документ", который состоит из" оценка "и"ранг". "document_id" будет ключом таблицы.

Я хочу обновить " счет "различных записей таблицы, используя ключ:"document_id". Но когда обновление баллов сделано, я хочу отсортировать список / таблицу с помощью оценки и присвоить значение ранга переменной "ранг" на основе обновленного балла.

может кто-нибудь любезно дать мне некоторые рекомендации о том, как я могу продолжить? Или, может, мне просто составить список?

максимальное количество элементов таблицы может быть до 25000-30000.

спасибо.

3 ответов


dict Python уже является хэш-таблицей.

doc_hash = {}
doc_hash[doc.id] = doc

присвоить звание:

docs = sorted(doc_hash.itervalues(), key=operator.attrgetter('score'), reverse=True)
for i, doc in enumerate(docs):
    doc.rank = i

почему бы не использовать OrderedDict?

>>> from collections import OrderedDict

>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

>>> # dictionary sorted by key
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

>>> # dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

>>> # dictionary sorted by length of the key string
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])

что-то вроде этого?

sorted_keys = sorted(d.keys(), key=lambda element: element['score'])
for i in range(len(sorted_keys)):
  d[sorted_keys[i]]['rank'] = i

присваивает каждому элементу в d (элементы также подразумеваются как словари) ранг, основанный на его счете.