2017-07-25 96 views
1

内所以,我有各种键的字典,以及这些密钥值不同大小的列表:返回字典键,如果键的其中一个值是字符串

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

如果我有一个字符串,如下所示:

stringa = 'blahfourblah' 

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

我曾尝试下面的代码:

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

但这只是返回如下:

[] 

任何帮助将不胜感激!

+1

您是否认为''''''''''''''''''''可以工作? –

回答

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

+0

只是一个小问题,我认为它应该是'v in stringa'。 –

+0

@IljaEverilä:已经编辑:)但无论如何。 –

+1

该死的我的慢手指! –

相关问题