You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 01:15:05