2016-04-26 5 views
0

私は本の電話のバイナリ検索ツリーを書いています。問題は、メインコードを書くときです。私は辞書のデータ構造を使用しようとしましたが、連絡先の名前をキーとする方法を理解できません。私は名前を書いて電話番号を価値として得たいと思っています。辞書構造のキーとして名前を渡すにはどうすればいいですか?

(実際にソートされたリストとしてalistがあれば)かなり近かったそれはので、私は、私はあなたを助けるだろうと思った。これは、コード

def binarySearch(alist, item): 
     first = 0 
     last = len(alist)-1 
     found = False 

     while first<=last and not found: 
      midpoint = (first + last)//2 
      if alist[midpoint] == item: 
       found = True 
      else: 
      if item < alist[midpoint]: 
        last = midpoint-1 
      else: 
       first = midpoint+1 
       return found 

phonebook = {} 
phonebook["John"] = 938477566 
phonebook["Jack"] = 938377264 
phonebook["Jill"] = 947662781 

print(binarySearch(phonebook, "John")) 
print(binarySearch(phonebook, "Jack")) 
+2

バイナリ検索ではなく、辞書をソートする必要があります。 – sberry

+2

辞書検索のために特別な検索機能が必要なのはなぜですか?彼らはすでにO(1)です。 – TigerhawkT3

+3

'phonebook'には、 'John'、 'Jack'、 'Jill'の3つのキーがあります。 'alist [midpoint]'を呼び出すと、 'midpoint'は数字(この場合は1)です。あなたは' phonebook [1] 'を呼び出しています.3つの既存のキーの1つではないので存在しません –

答えて

1

あなたのソリューションである私にエラー

Traceback (most recent call last): 
    File "FastSort.py", line 22, in <module> 
    print(binarySearch(phonebook, "John")) 
    File "FastSort.py", line 8, in binarySearch 
    if alist[midpoint] == item: 
KeyError: 1 

を与えましたビット:

import random 

def binarySearch(alist, item): 
    first = 0 
    last = len(alist)-1 

    while first<=last: 
     midpoint = (first + last)//2 
     print midpoint 
     if alist[midpoint][0] == item: 
      return alist[midpoint] 
     else: 
     if item < alist[midpoint][0]: 
       last = midpoint-1 
     else: 
      first = midpoint+1 
    return False 

items = [] 
items.append(("John", 938477566)) 
items.append(("Jack", 938377264)) 
items.append(("Jill", 947662781)) 

items = sorted(items)  

print(binarySearch(items, "John")) 
print(binarySearch(items, "Jack")) 
print(binarySearch(items, "Jill")) 
関連する問題