Python哈希表设计
我想用python实现一个哈希表。在表上,类对象将与键值相关联。问题是我想使用键值来查找类的索引并更新它(这当然不是问题)。但是,如果我想使用类的特定值对表进行排序,该怎么办呢 例如,让我们考虑一下,我们有三个值:文档ID、分数和排名。有一个类“文档”,它由“分数”和“等级”组成。“文档id”将是表的键 我想使用键“document_id”更新表中各个条目的“score”。但是,当完成分数更新时,我想使用分数对列表/表进行排序,并根据更新后的分数为“rank”变量分配rank值 有人能给我一些关于如何继续的指导吗?或者我应该把它列个清单 表中项目的最大数量可能高达25000-30000Python哈希表设计,python,hash,Python,Hash,我想用python实现一个哈希表。在表上,类对象将与键值相关联。问题是我想使用键值来查找类的索引并更新它(这当然不是问题)。但是,如果我想使用类的特定值对表进行排序,该怎么办呢 例如,让我们考虑一下,我们有三个值:文档ID、分数和排名。有一个类“文档”,它由“分数”和“等级”组成。“文档id”将是表的键 我想使用键“document_id”更新表中各个条目的“score”。但是,当完成分数更新时,我想使用分数对列表/表进行排序,并根据更新后的分数为“rank”变量分配rank值 有人能给我一些关
谢谢 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
像这样的
sorted_keys = sorted(d.keys(), key=lambda element: element['score'])
for i in range(len(sorted_keys)):
d[sorted_keys[i]]['rank'] = i
根据分数为
d
中的每个元素分配一个等级。为什么不使用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)])
了解
枚举
。这会让你高兴的:)谢谢你的回复。但是,如果我每次更新/插入文档时都尝试更新排名,那么循环的顺序不会快速增加,而不是在所有插入/更新结束时进行排序吗?我不会在队伍里做更多的事情。把它们分类后,我就把它们放进一个文件里。我不知道你说的“快速增长”是什么意思?您可以添加一组文档,然后在最后一次重新分配所有列组。我错说了“每次你插入一个。”很抱歉,如果是在添加文档的末尾,那么就可以了。我说的是桌子的大小。我想,如果每次在一个大表中输入/更新条目时都尝试运行排序,那么这可能会成为一个漫长的过程。@KarlKnechtel,我很抱歉,有一些编辑,因此注释没有足够的意义。在这个问题上我告诉了他。更新条目后,我想根据特定字段对它们进行排序。这就是我所说的。你不能对一个杂烩进行排序。散列不是序列。如果要保持值的排序顺序,请使用适当的数据结构。