Дизайн хэш-таблицы 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
(элементы также подразумеваются как словари) ранг, основанный на его счете.