2017-06-26 51 views
1

我的哈希碼僅返回單詞的整個標題。 我想使它顯示的結果只使用關鍵字 至少2個單詞(向前),然後顯示結果(獲取函數)。搜索關鍵字而不是整個單詞 - py

我的哈希碼

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) 

樣本輸出:

當整個標題被輸入

Sample Output search (needs to have the whole word in order to show)

當關鍵詞被輸入(我需要即使對顯示結果關鍵字被打字)

no results when keyword is typed

我需要的是: 輸出: 騙子 - Kygos ,其餘的單詞與謝在他們的名字

+0

你可以更好地解釋,你可以顯示輸入和輸出的例子來更好地瞭解您。 – eyllanesc

+0

除此之外,與pyqt有關係,因爲示例不需要pyqt的功能,因爲它顯示您的代碼。 – eyllanesc

+0

對不起,我會嘗試再次重新顯示我的問題,然後發佈關於它的圖片 –

回答

1

哈希表是不是該任務的正確的數據結構。散列值的目的是將搜索範圍縮小到可能性的一小部分。由於散列值依賴於整個字符串,因此僅使用字符串的一部分會給出錯誤的子集。

此任務的更好數據結構是trie(有時稱爲「前綴樹」)。雖然自己編寫這個數據結構並不難,但PyPI上已經有很多經過測試的,現成可用的模塊。

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