Python 哈希表设计
我想在Python中实现一个哈希表。在这个表中,一个类的对象会和一个键值关联起来。问题是,我想用这个键值来找到类的索引并更新它(这当然不是问题)。但是,如果我想根据类的某个特定值来对表进行排序,我该怎么办呢?
举个例子,我们有三个值:document_id、score和rank。这里有一个叫“document”的类,它包含“score”和“rank”。“document_id”将是这个表的键。
我想用“document_id”这个键来更新表中各个条目的“score”。但是在更新完分数后,我想根据分数对列表/表进行排序,并根据更新后的分数给“rank”变量分配值。
有没有人能给我一些指导,告诉我该怎么做?或者我是不是应该简单地把它做成一个列表呢?
这个表的最大项数可能会达到25000到30000。
谢谢。
3 个回答
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
中的每个元素(这些元素也可以理解为字典)根据它的分数分配一个等级。
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)])
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