Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 字典/数据库键值检索_Python_Dictionary - Fatal编程技术网

Python 字典/数据库键值检索

Python 字典/数据库键值检索,python,dictionary,Python,Dictionary,如前一个(但不同的)问题所述,我正在尝试用Python构建一个“简单”的字典/数据库,它将从十个列表中检索一个名称,并包含请求的信息。i、 e.输入可以是“John phone”,其中输出是“John的电话号码是0401”(我有记录);但我也可以输入“John Birth”或“John Habiops”,输出结果会相应 因为我是个彻头彻尾的傻瓜,我甚至不知道从哪里开始。几个小时的谷歌搜索和仔细研读课堂讲稿到目前为止没有任何结果。 我觉得这与多参数%函数有关,但我们的讲师真的不清楚如何进一步。 到

如前一个(但不同的)问题所述,我正在尝试用Python构建一个“简单”的字典/数据库,它将从十个列表中检索一个名称,并包含请求的信息。i、 e.输入可以是“John phone”,其中输出是“John的电话号码是0401”(我有记录);但我也可以输入“John Birth”或“John Habiops”,输出结果会相应

因为我是个彻头彻尾的傻瓜,我甚至不知道从哪里开始。几个小时的谷歌搜索和仔细研读课堂讲稿到目前为止没有任何结果。 我觉得这与多参数%函数有关,但我们的讲师真的不清楚如何进一步。 到目前为止,我得到的是:

#!/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”函数,这样程序不会在给出信息后立即关闭,但不确定这是否合适。
任何提示都是很好的,即使是一个“试试这个”的提示,或者是一个相关网站的链接

因为这是家庭作业,所以我的回答仅限于一些提示:

  • tok=name.split()
    name
    拆分为一个单词列表,因此
    的“约翰地址”将变成
    [“约翰”、“地址”]
  • 您可以通过
    tok[0]
    tok[1]
    访问单个单词,并使用它们索引到
    friends
    ,以获取相关人员,然后是相关字段
  • 我认为将输入/搜索逻辑包装到
    while
    循环中没有问题,这样用户就可以执行多个查询。唯一需要弄清楚的是如何退出循环

  • 听aix回答问题的第一部分。对于第二部分,我建议用户输入一个退出值(可能是“退出”),用户可以输入退出程序,然后让while循环继续运行,而输入不是该值。

    根据您的示例代码,“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
    

    ''
    上拆分通常是个坏主意,只需使用
    .split()
    ;然后,如果用户键入
    johnaddress
    (两个空格,加上一个尾随空格),结果仍然是
    ['John','address']
    匿名投票人说:耐心等待!键入注释需要一段时间。:)