【问题标题】:Retrieving 'x' from seaching a string against a list从列表中搜索字符串中检索“x”
【发布时间】:2020-06-11 14:38:10
【问题描述】:

在从字符串 (str) 中找到与列表 (list) 中的任何元素匹配后,我正在尝试从字典 (dict) 中打印 'x' 的值。

>>> dict = {'c3750': 'switch', 'vsrx': 'vfirewall'}
>>> list = ['c3750', 'vsrx']               
>>> str = "Juniper Networks, Inc. firefly-perimeter internet router, kernel JUNOS 12.1X47-D15.4 #0: 2014-11-12 02:13:59 UTC     builder@chamuth.juniper.net:/volume/build/junos/12.1/service/12.1X47-D15.4/obj-i386/junos/bsd/kernels/VSRX/kernel Build date: 2014-11-12 "
>>> if any(x in str.lower() for x in list):        
...   print "{}".format(dict['x'])                 
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyError: 'x'

预期结果:它应该返回“vfirewall”。

【问题讨论】:

  • 您是否有意覆盖所有可能的内置插件?最好避免这种情况
  • 我不明白你的意思?如果您有解决办法,请说明一下吗?
  • 否定:NameError: name 'x' is not defined
  • 您应该为此使用显式循环

标签: python list dictionary if-statement search


【解决方案1】:

Try 应该是你想要的:

dct = {'c3750': 'switch', 'vsrx': 'vfirewall'}
lst = ['c3750', 'vsrx']
s = "Juniper Networks, Inc. firefly-perimeter internet router, kernel JUNOS 12.1X47-D15.4 #0: 2014-11-12 02:13:59 UTC     builder@chamuth.juniper.net:/volume/build/junos/12.1/service/12.1X47-D15.4/obj-i386/junos/bsd/kernels/VSRX/kernel Build date: 2014-11-12 "

for x in lst:
    if x in s.lower():
        print("{}".format(dct[x]))

您应该使用循环来搜索列表中的每个元素。

【讨论】:

  • 非常感谢!
  • 要等同于原始代码,您应该添加break
  • @Tomerikoo 我明白你的意思,但我不确定这是否真的是他想要的
  • 感谢@luigigi。这就是我正在寻找的回应!非常感谢!
【解决方案2】:

你的意思是这样的吗?

dd = {'c3750': 'switch', 'vsrx': 'vfirewall'}
ll = ['c3750', 'vsrx']               
ss = "Juniper Networks, Inc. firefly-perimeter internet router, kernel JUNOS 12.1X47-D15.4 #0: 2014-11-12 02:13:59 UTC     builder@chamuth.juniper.net:/volume/build/junos/12.1/service/12.1X47-D15.4/obj-i386/junos/bsd/kernels/VSRX/kernel Build date: 2014-11-12 "

[dd[x] for x in ll if x in ss.lower()]

Out[1]:
    ['vfirewall']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2021-03-02
    相关资源
    最近更新 更多