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

Joa*_*dao 1 python string dictionary

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

dict = {'a' : ['one', 'two'],
        'b' : ['three', 'four', 'five'],
        'c' : ['six']}
Run Code Online (Sandbox Code Playgroud)

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

stringa = 'blahfourblah'
Run Code Online (Sandbox Code Playgroud)

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

我试过以下代码:

[k for k, v in dict.items() if stringa in v]
Run Code Online (Sandbox Code Playgroud)

但这只会返回以下内容:

[]
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

Wil*_*sem 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)]
Run Code Online (Sandbox Code Playgroud)

对于每个键值对,我们将检查条件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']
Run Code Online (Sandbox Code Playgroud)

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