如果其中一个键值在字符串内,则返回字典键

时间:2017-07-25 21:08:38

标签: python string dictionary

所以我有一个包含各种键的字典,这些键在各种大小的列表中都有值:

Traceback (most recent call last):
  File "/usr/local/bin/pip", line 9, in <module>
    load_entry_point('pip==9.0.1', 'console_scripts', 'pip')()
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/__init__.py", line 233, in main
    return command.main(cmd_args)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py", line 185, in main
    for name in ["pip._vendor", "distlib", "requests", "urllib3"]
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/compat/dictconfig.py", line 565, in dictConfig
    dictConfigClass(config).configure()
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/compat/dictconfig.py", line 332, in configure
    del logging._handlerList[:]
AttributeError: 'module' object has no attribute '_handlerList'

如果我有一个字符串如下:

dict = {'a' : ['one', 'two'],
        'b' : ['three', 'four', 'five'],
        'c' : ['six']}

我想返回'b',因为在stringa中找到了键'b'(即'4')的一个值。

我尝试过以下代码:

stringa = 'blahfourblah'

但这只会返回以下内容:

[k for k, v in dict.items() if stringa in v]

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:5)

条件stringa in v不正确,因为它会检查整个stringa是否是列表中的元素。元素'blahfourblah'不在列表['three', 'four', 'five']中。所以那是行不通的。

您可以使用any(..)

的构造
[k for k, vs in d.items() if any(v in stringa for v in vs)]

对于每个键值对,我们将检查条件any(v in stringa for v in vs)。这意味着我们遍历v中的每个元素,并检查该元素v是否是stringa的子字符串。如果有这样的元素,any(..)将返回True。否则它将返回False。它找到这样一个元素的那一刻起,就会停止寻找另一个元素。

生成:

>>> [k for k, vs in d.items() if any(v in stringa for v in vs)]
['b']
  

注意:不要将dict用作变量名称:它将覆盖dict类引用。我在这里使用d