Python如何将input返回的字符串匹配到对应同名字典变量
服务商查询目录的字符串匹配实现方案
问题成因
你对问题的判断是正确的:input() 函数只会返回字符串类型的输入内容,不会自动将输入值和程序中已定义的同名变量做映射绑定,因此直接打印输入值只能输出用户输入的字符串本身,无法读取对应字典内的服务商数据。
不推荐的实现思路
你可能会想到用eval(y)直接把输入的字符串解析为同名变量的引用,但这种写法存在严重的安全隐患:eval会直接执行传入字符串的任意Python代码,一旦输入内容被篡改,会直接威胁程序运行安全,完全不适合这类接收用户输入的场景。
哪怕是通过globals().get(y)从全局作用域中查找同名变量的写法,也很容易因为变量名重复导致误匹配,还会让代码的引用关系变得混乱,完全没必要为了减少少量重构工作量引入这类不必要的风险。
最优实现方案
将所有服务类别的数据统一收纳到一个嵌套的总字典中,直接把用户输入的字符串作为字典查询键,匹配对应类别的服务商列表即可。
示例代码如下:
# 统一存储所有服务类别的服务商数据 service_directory = { "Plumbers": { "Plumber 1 Name": "Phone number", "Plumber 2 Name": "Phone number" }, "Electricians": { "Electrician 1 Name" : "Phone number", "Electrician 2 Name" : "Phone number" } } # 接收用户输入 selected_service = input("Hi, What kind of service do you require? Please type Plumbers or Electricians? ") # 匹配查询并输出结果 if selected_service in service_directory: provider_list = service_directory[selected_service] print(f"\n本地可提供服务的{selected_service}信息如下:") for provider_name, contact in provider_list.items(): print(f"- {provider_name}:联系电话 {contact}") else: print("抱歉,当前目录暂不支持查询该类服务,请输入Plumbers或Electricians后重试。")
方案优势
- 全程无任意代码执行逻辑,不存在安全风险
- 数据结构清晰易维护,后续新增服务类别(如家电维修、开锁服务)时,只需在总字典中追加对应键值对即可,无需零散定义多个独立变量
- 内置输入校验逻辑,用户输入不存在的服务类别时会给出友好提示,不会触发
KeyError导致程序崩溃
内容的提问来源于stack exchange,提问作者user15641129
相关产品推荐
相关产品推荐

