所以我有一个包含各种键的字典,这些键在各种大小的列表中都有值:
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]
非常感谢任何帮助!
答案 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
。