【问题标题】:Search for keyword instead of whole word - py搜索关键字而不是整个单词 - py
【发布时间】:2017-06-26 03:33:49
【问题描述】:

我的哈希码只返回单词的整个标题。 我想让它只使用关键字来显示结果 至少 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)

样本输出:

当整个标题被输入时

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

我需要的是: 输出: 骗子-Kygos 以及其他名字中带有chea的词

【问题讨论】:

  • 你可以解释得更好,你可以展示输入和输出的例子来更好地理解你。
  • 除此之外与 pyqt 有关系,因为示例不需要 pyqt 的功能,因为它显示了您的代码。
  • 对不起,我会尝试再次修改我的问题,然后发布有关它的图片
  • key 的一些示例值是什么?
  • @ChickenFeet key = 任意单词,key_hash = ASCII 数值,key_value = [word1,word2]

标签: python python-3.x hash trie prefix-tree


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多