2012-04-27 189 views
0

我目前正在學習Python的基礎知識,並且需要創建一個包含其他詳細信息(電話號碼,地址,生日和三個興趣)的十人名字數據庫。在Python中搜索字典

夢想是在提示輸入人名時,他們的所有細節都會出現。或者在輸入name['phone']時,會出現人員姓名和電話號碼。地址,生日和興趣相同。我被告知必須使用argv列表從命令行獲得名稱和相關字段(電話,興趣愛好等),但我不知道如何執行此操作。任何幫助將非常感激!

這裏是什麼,我已經寫了這本字典的例子:

friends = {'Matt ' : {'phone' : '13579', 
         'birthday' : '2 Dec', 
         'address' : 'Sydney', 
         'interests' : ['a', 'b', 'c' ]}, 

      'Tim ' : {'phone' : '24680', 
        'birthday' : '19 Feb', 
        'address' : 'Honolulu', 
        'interests' : ['x', 'y', 'z' ]}, 

      'Kate ' : {'phone' :'12345', 
         'birthday' : '30 Jun', 
         'address' : 'Beijing', 
         'interests' : ['q', 'w', 'e' ]} 
      } 

name = raw_input ('Please enter search criteria: ') 

if name in friends: 
    print 'yes' 
else: 
    print 'no data' 

太感謝您了!

+6

因爲'name.lower()'會將** Matt **轉換爲** matt **並且它不會匹配... – FallenAngel 2012-04-27 07:26:06

+1

另外,請確保您在按鍵結尾處佔用額外空間: 「'馬特'...... – 2012-04-27 07:27:46

+0

啊,是的。謝謝! – 2012-04-27 07:47:01

回答

2

首先,您必須使您的字典鍵具有一致的風格。我的意思是,無論它們都是以資本開始還是所有都可能是大寫或小寫。另外,在密鑰的開頭或結尾有空格並不是一個好的選擇。

讓我們假設你有以下主要結構:

friends = {'Matt' : {'phone' : '13579', 
        'birthday' : '2 Dec', 
        'address' : 'Sydney', 
        'interests' : ['a', 'b', 'c' ]}, 

     'Tim' : {'phone' : '24680', 
       'birthday' : '19 Feb', 
       'address' : 'Honolulu', 
       'interests' : ['x', 'y', 'z' ]}, 

     'Kate' : {'phone' :'12345', 
        'birthday' : '30 Jun', 
        'address' : 'Beijing', 
        'interests' : ['q', 'w', 'e' ]} 
     } 

由於所有的鍵啓動以大寫字母,並有開頭或末尾沒有空格,你可以做到以下幾點:

name = raw_input('Please enter search criteria: ') 
name = name.strip() # remove whitespace at the beginning and the end of the string 
name = name.capitalize() # capitilize the first letter 

當然,你可以調用字符串函數在一個單行:

name = name.strip().capitalize() 

小號可以使用friends[name]['<key>']獲得特殊信息。

+0

優秀的答案。 +1。 – 2012-04-27 07:58:53

0

刪除

name = name.lower() 

,因爲你的字典裏所有的小寫字母沒有鍵或更改你的字典裏有全部小寫鍵。

1

這裏的情侶問題,你的鑰匙都有一個空間在最後像'Matt '。 而且它們不是小寫字母。

+0

@Kay你可以創建一箇中介查找字典,如果你想在鍵中保留正確的外殼,同時仍然允許查找任何情況:'lookup = dict((key.lower(),key))。現在使用像這樣:'如果name.lower()在查找:print friends [lookup [name.lower()]]''。 – 2012-04-27 07:45:20

0

你正在做的是一個經典的程序編程與分離的數據和功能 - 功能給予的數據來操縱它們。這有時會導致複雜的數據結構。

我建議去面向對象編程的情況。爲一個人寫一個類(它可以基於字典來捕獲任何信息)。