Python哈希表设计

时间:2012-02-09 14:22:27

标签: python hash

我想在python中实现一个哈希表。在表上,类对象将与键值相关联。问题是我想使用键值来查找类的索引并更新它(这当然不是问题)。但是,如果我想使用类的特定值对表进行排序,我该怎么办。

例如,让我们考虑一下,我们有三个值:document_id,得分和排名。有一个类“文档”,由“得分”和“等级”组成。 “document_id”将成为表格的关键。

我想使用密钥“document_id”更新表格各种条目的“得分”。但是当完成分数更新时,我想使用分数对列表/表进行排序,并根据更新的分数将等级值分配给“排名”变量。

有人可以给我一些指导方针,我该怎么办?或者我应该简单地把它列为一个清单?

表格的最大项目数可能高达25000-30000。

感谢。

3 个答案:

答案 0 :(得分:21)

Python的dict已经是一个哈希表。

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

答案 1 :(得分:4)

为什么不使用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)])

答案 2 :(得分:0)

这样的东西?

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

d中的每个元素(元素也暗示也是字典)分配基于其分数的排名。