【问题标题】:Python Easy Way to Match String Input to existing dictionaryPython 将字符串输入匹配到现有字典的简单方法
【发布时间】:2014-07-18 15:13:04
【问题描述】:

我正在编写一个可以在多个表单上运行的测试。我创建了一个批处理文件,它将发送一个包含表单名称的参数(因此从技术上讲,每个批处理文件只运行一次测试)。对于每个要与参数输入匹配的测试,我都有一个字典。所以假设我有:

import sys

form1 = {
  a = 3,
  b = 4
}
form2 = {
  a = 7,
  b = 8
}

args = sys.argv[1] #this would be the form input as a string; example: "form1"

我想要一种方法让它知道“form1”与字典 form1 匹配。显然,我可以这样做:

if args == "form1":
  form = form1
elif args == "form2":
  form = form2
...

但是,由于有 27 个测试,我宁愿不必处理这些问题。有没有更好的方法来做到这一点?大致如下:

form = matchvar(args)
runtest(form)

谢谢。

【问题讨论】:

    标签: python string batch-file dictionary


    【解决方案1】:

    我敢推荐一本字典吗?

    formdict = { "form1": form1, "form2": form2 }
    

    然后您可以使用formdict.get(args,[]) 访问正确的字典。

    >>> formdict["form1"]["a"]
    3
    >>> formdict["form2"]["a"]
    7
    

    【讨论】:

    • 你可以给出 formdict.get(args,[]) 因为如果没有 args 它给出错误
    • hmm... 不过,关于这一点,每个字典都相当大。我的字典调用频率很高,所以我得回去把它们都换掉
    • 鉴于我在技术上可以将每个键设置为当前使用的变量......
    • 嗯,您可以使用 Burhan Khalid 的解决方案更轻松地分配它们,是的。我不确定字典会有多少变化。
    【解决方案2】:

    使用包含的表单创建字典,然后使用从命令行获得的值查找键:

    forms = dict()
    forms['form1'] = {a:3, b:4}
    forms['form2'] = {a:7, b:8}
    
    form = forms.get(args)
    if form:
       runtest(form)
    else:
       print('Invalid form: {}'.format(args))
    

    【讨论】:

    • 我似乎无法让这个工作,并且命令行在告诉我任何内容之前就关闭了。 forms.get(args) 应该做什么?我之前实际上没有使用过 get(),但我看到的是你需要 2 个参数?
    • 还是和form = forms[args]一样? (如果它不存在,只有你的会引发错误)
    • @user2869231 第二个参数是可选的,它指定了如果没有找到密钥时返回什么。
    • 所以我将 a=3, b=4 更改为 a:3, b:4 因为它需要一个冒号;然而,现在它告诉我名字'a'没有定义——这就是我一直写字典的方式o.O
    • 啊,只需将它们放在引号中 - 它正在将它们作为变量读取
    猜你喜欢
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多