2015-06-09 136 views
1

所以,我一直在研究這個簡單的Python程序來熟悉字典。基本上,它可以作爲你可以搜索的數據庫。如果你的輸入是在字典鍵中,它會顯示關於輸入的信息。Python:迭代字典時出現問題

Family = {'Jim' : ['cool guy', 'has facial hair'], 
      'Ned' : ['hot stuff', ' wears Tees']} 

query = input("Look up database on whom? > ") 
for (name, info) in Family.items(): 
    if name in query or name.lower() in query: 
     print("{} is {}".format(name, info)) 

這^工作。但是,當我試圖添加一個ELSE子句時,爲了處理不存在的條目,我得到了這個。

else: 
    print ('Value not found!') 

它打印未找到的值!在提出價值之前多次。如果我嘗試添加「返回開始」功能,它甚至不會顯示註冊值。我知道這是因爲它是一個循環,並逐個迭代字典;所以就像1)吉姆是真的,然後2)尼德是假的。

我該如何改進這段代碼: - 給出一個關於不存在的條目的錯誤,然後重新啓動程序。謝謝。

+2

是否縮進到與'for'或'if'的等級?看起來像它的'for'。 –

+0

不,這是縮進與'if' – AstralWolf

回答

0

這是一種方法:

Family = {'Jim' : ['cool guy', 'has facial hair'], 
      'Ned' : ['hot stuff', ' wears Tees']} 

query = input("Look up database on whom? > ") 
if query in Family.keys(): 
    for (name, info) in Family.items(): 
     if name in query or name.lower() in query: 
      print("{} is {}".format(name, info)) 
else: 
    print "Print Something - Not in Family" 
+0

謝謝,我發現這個答案最容易理解。如果在Family.keys()中查詢:'如果在Family.keys()中查詢query.capitalize(),'我只是改變':'以允許小寫的條目 – AstralWolf

+0

太好了,我很樂意提供幫助! –

1

您需要注意代碼中的不區分大小寫。遍歷列表,以確保在繼續之前,這個名字存在:

Family = {'Jim' : ['cool guy', 'has facial hair'], 
      'Ned' : ['hot stuff', ' wears Tees']} 

names = [name.lower() for name in Family] 
def find(query): 
    if query.lower() in names: 
     info = [Family[n] for n in Family if n.lower() == query.lower()] 
     print('{} is {}'.format(
      query, info 
     )) 
    else: 
     print('{} not found'.format(query)) 

如果使用下面的示例嘗試:

find('Ned') 
find('ned') 
find('no ned') 

您將得到如下結果:

Ned is [['hot stuff', ' wears Tees']] 
ned is [['hot stuff', ' wears Tees']] 
no ned not found