所以我有一个包含各种键的字典,这些键在各种大小的列表中有值:
dict = {'a' : ['one', 'two'],
'b' : ['three', 'four', 'five'],
'c' : ['six']}
如果我有一个字符串如下:
stringa = 'blahfourblah'
我想返回 'b',因为键 'b' 的值之一(即 'four')在 stringa 中找到。
我试过下面的代码:
[k for k, v in dict.items() if stringa in v]
但这只会返回以下内容:
[]
如有任何帮助,我们将不胜感激!
最佳答案
条件 stringa in v
不正确,因为它将检查整个 stringa
是否是列表中的一个元素。元素 'blahfourblah'
不在列表 ['three', 'four', 'five']
中。所以那行不通。
您可以使用带有 any(..)
的结构:
[k for k, <b>vs</b> in d.items() if <b>any(v in stringa for v in vs)</b>]
在这里,对于每个键值对,我们将检查条件 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']
Note: do not use
dict
as a variable name: it will overwrite thedict
class reference. I usedd
here.
关于python - 如果其中一个键的值在字符串中,则返回字典键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45313484/