我想在python中实现一个哈希表。在表上,类对象将与键值相关联。问题是我想使用键值来查找类的索引并更新它(这当然不是问题)。但是,如果我想使用类的特定值对表进行排序,我该怎么办。
例如,让我们考虑一下,我们有三个值:document_id,得分和排名。有一个类“文档”,由“得分”和“等级”组成。 “document_id”将成为表格的关键。
我想使用密钥“document_id”更新表格各种条目的“得分”。但是当完成分数更新时,我想使用分数对列表/表进行排序,并根据更新的分数将等级值分配给“排名”变量。
有人可以给我一些指导方针,我该怎么办?或者我应该简单地把它列为一个清单?
表格的最大项目数可能高达25000-30000。
感谢。
答案 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
中的每个元素(元素也暗示也是字典)分配基于其分数的排名。