2016-04-26 67 views
0

我正在寫書電話的二叉搜索樹。問題是當我試圖編寫主代碼時。我試圖使用字典數據結構,但我無法弄清楚如何將聯繫人名稱作爲關鍵字。我想寫任何名字,並把電話號碼作爲一個值。如何在字典結構中傳遞名稱作爲關鍵字?

它給了我一個錯誤

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 

這是一個代碼

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';當你調用'alist [中點]','中點'是一個數字(在本例中爲1)時,你正在調用'phonebook [1]',它不存在,因爲它不是三個現有密鑰之一 –

回答

1

您的解決方案(如果alist作爲一個真正的排序列表)相當接近,所以我想我會幫你出一bit:

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")) 
相關問題