1

我的哈希码只返回单词的整个标题。我想让它显示结果,只使用至少 2 个单词(以后)的关键字,然后显示结果(获取函数)。

我的哈希码

class hashin:
def __init__(self):
    self.size = 217  # size of hash table
    self.map = [None] * self.size

def _get_hash(self, key):
    hash = 0
    for char in str(key):
        hash += ord(char)
    return hash % self.size
#returns the ASCII value of char in str(key)

def add(self, key, value):  # add item to list
    key_hash = self._get_hash(key)
    key_value = [key, value]
    if self.map[key_hash] is None:
        self.map[key_hash] = list([key_value])
        return True
    else:
        for pair in self.map[key_hash]:
            if pair[0] == key:
                pair[1] = value
                return True
        self.map[key_hash].append(key_value)
        return True

def get(self, key):  # search for item
    key_hash = self._get_hash(key)
    if self.map[key_hash] is not None:
        for pair in self.map[key_hash]:  # find pair of words
            if pair[0] == key:  # if pair is equals to the whole title of the word
                return pair[0] + " - " + pair[1]
    return "Error no results for %s \nEnter the correct word." % (key)

样本输出:

输入整个标题时

示例输出搜索(需要有整个单词才能显示)

输入关键字时(即使输入关键字,我也需要显示结果)

键入关键字时没有结果

我需要的是:输出:Cheater - Kygos 和他们名字中带有 chea 的其他词

4

1 回答 1

0

哈希表不是此任务的正确数据结构。哈希值的目的是将搜索范围缩小到可能性的一小部分。由于哈希值依赖于整个字符串,因此仅使用字符串的一部分将给出错误的子集。

用于此任务的更好的数据结构是trie(有时称为“前缀树”)。虽然自己编写这个数据结构并不难,但 PyPI 上已经有许多经过测试的、现成可用的模块。

见: https ://pypi.python.org/pypi?%3Aaction=search&term=trie&submit=search

于 2017-08-09T06:25:36.307 回答