2017-06-26 19 views
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) 

サンプル出力:キーワードを入力した場合には、全体のタイトルが

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

を入力した

(私は結果を表示する必要があるとしてもキーワードが入力されました)

私は必要なもの

no results when keyword is typed

は次のとおりです。 出力: うそつき - Kygos と自分の名前でCHEAと言い換える

+0

あなたはより良い説明できる、あなたがよりよく理解するために、入力と出力の例を示すことができました。 – eyllanesc

+0

それに加えて、pyqtとの関係を持っているので、サンプルがpyqtを必要としない機能はコードを示すので。 – eyllanesc

+0

申し訳ありませんが、私は再び私の質問をrepolishしようとして、それについての写真を投稿します –

答えて

1

ハッシュテーブルは、このタスクのための適切なデータ構造ではありません。ハッシュ値の目的は、可能性の小さなサブセットに検索を絞り込むことです。ハッシュ値は文字列全体に依存するため、文字列の一部だけを使用すると誤ったサブセットが返されます。

このタスクのより良いデータ構造はtrie(「プレフィックスツリー」とも呼ばれます)です。このデータ構造を自分で作成することは困難ではありませんが、既にPyPIで利用可能なテスト済みの、すぐに使えるモジュールが多数あります。

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

関連する問題