字典列表中检查值的最佳方法是什么?

15

所以我有一个像这样的列表字典:

dct = {'1': ['hello','goodbye'], '2': ['not here','definitely not here']}

如何快速检查“hello”是否在我的字典列表中?


11
any('hello' in val for val in dct.values()) - Willem Van Onsem
非常感谢您的提交!如果您将翻译作为答案提交,我可以接受并点赞您。 - ragardner
4
如果你反转数据结构,效率会更高。dct = {'hello': 1, 'goodbye': 1, 'not here': 2, 'definitely not here': 2} 这样可以实现常数时间搜索,而不是根据字典中项数而变慢的搜索。 - Charles Duffy
@martineau,当然,但是一开始建立它也不是免费的。如果你知道它将如何使用,也许你应该从一开始就以不同的方式构建它。 - Charles Duffy
2
@martineau,此外,即使修改构建过程不可行,也可以将其反转一次,并廉价地搜索任意数量的反转结构。 - Charles Duffy
显示剩余8条评论
1个回答

17

正如Willem Van Onsem所评论的那样,实现这一点最简单的方法是:

any('hello' in val for val in dct.values())
any函数会在给定的可迭代对象中有任何一个元素为真时返回True。 dct.values()函数会返回一个包含字典中所有值的可迭代对象 dict_values'hello' in val for val in dct.values() 是一个生成器表达式,它会在每个字典值中是否包含字符串 'hello' 时分别返回True或False。
如果您想知道该字符串所在的键,请执行以下操作:
keys = [key for key, value in dct.items() if 'hello' in value]
在您的情况下,keys 将是 ['1']。如果您仍然这样做,那么可以在布尔上下文中直接使用该列表,例如:if keys: ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接