字典/数据库键值检索

时间:2012-05-04 16:00:31

标签: python dictionary

如前一个(但不同的)问题所述,我正试图找出一个带有Python的“简单”字典/数据库,它将从十个列表中检索一个名称,并提供所请求的信息。即输入可以是'John phone',其中输出是'John的电话号码是0401'(我已经拍了拍);但我也可以输入'John Birthday'或'John hobbies',输出也会对应。

由于我是一个完整的菜鸟,我甚至不确定从哪里开始。几个小时的谷歌搜索和阅读讲义到目前为止没有任何结果。 我觉得它与多重参数%函数有关,但我们的讲师真的不清楚如何进一步研究它。 到目前为止,我所拥有的是:

#!/usr/bin/python

friends = {'John': {'phone' : '0401',
                    'birthday' : '31 July',
                    'address' : 'UK',
                    'interests' : ['a', 'b', 'c']},
           'Harry': {'phone' : '0402',
                    'birthday' : '2 August',
                    'address' : 'Hungary',
                    'interests' : ['d', 'e', 'f']}}
name = raw_input ('Please enter search criteria: ')
if name in friends: 
    print "%s's phone number is: %s" % (name, friends[name]['phone'])
else: 
    print 'no data'

我还想使用'while'功能,因此一旦获得该信息,prog就不会关闭,但不确定这是否合适。 任何指针都会很棒,即使它是“尝试这种”的暗示,或指向相关网站的链接。

3 个答案:

答案 0 :(得分:5)

由于这是家庭作业,我将限制我的回答一些提示:

  1. tok = name.split()会将name拆分为单词列表,因此'John address'将成为['John', 'address']
  2. 您可以将单个字词作为tok[0]tok[1]来访问,并使用它们转换为friends以获取相关人员,然后获取相关字段。
  3. 我认为将输入/搜索逻辑包装到while循环中没有问题,这样用户就可以执行多个查询。唯一要弄清楚的是你将如何退出该循环。

答案 1 :(得分:2)

根据您的示例代码,“John phone”无法正常工作,因为它实际上会查找“John phone”作为名称(并且“phone”是硬编码的)。例如,尝试这样的代码:

response = raw_input('Please enter search criteria: ').split()

try:
    print "%s's %s is %s" % (response[0], response[1], friends[response[0]][response[1]])
except KeyError:
    print 'no data'

split()分别获取每个参数,然后可以用[0]和[1](等等)引用。您已经使用%替换进入正确的轨道,但这种方法将使其具有更高的可用性和可读性。

关键是你不需要检查名称是否匹配(或标准是否匹配)。假设它会在那里 - 并且在特殊情况下(未找到匹配),它可以按预期返回“无数据”。

Please enter search criteria: John phone
John's phone is 0401

Please enter search criteria: Harry birthday
Harry's birthday is 2 August

答案 2 :(得分:0)

听取你问题第一部分的答案。对于第二部分,我建议用一个退出值(可能是“退出”),用户可以键入以退出程序,然后让你的while循环保持继续,而输入不是那个值。