2012-04-27 132 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

你正在做的是一个经典的程序编程与分离的数据和功能 - 功能给予的数据来操纵它们。这有时会导致复杂的数据结构。

我建议去面向对象编程的情况。为一个人写一个类(它可以基于字典来捕获任何信息)。