【问题标题】:Return dictionary key if one of key's values is within string如果键的值之一在字符串中,则返回字典键
【发布时间】:2026-01-21 20:05:01
【问题描述】:

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

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

如果我有如下字符串:

stringa = 'blahfourblah'

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

我已经尝试了以下代码:

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

但这只会返回以下内容:

[]

任何帮助将不胜感激!

【问题讨论】:

  • 你觉得'blahfourblah' in ['three', 'four', 'five']能用吗?

标签: python string dictionary


【解决方案1】:

条件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']

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

【讨论】:

  • 只是一个小注,我认为应该是v in stringa
  • 该死我的移动手指!