2017-04-01 104 views
2

所以我有一个列表的字典,像这样:检查列表字典中是否有值的最佳方法?

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

什么是最快的方法来检查,如果“你好”是我的列表中的一个在我的字典

+5

'任何('你好'val在val中的dct.values())''。 –

+0

非常感谢!如果您作为答案提交,我可以接受并投票给您 – citizen2077

+3

如果您颠倒了数据结构,这将会更有效率。 'dct = {'hello':1,'goodbye':1,'not here':2,'绝对不在这里':2}' - 这是一个恒定时间的搜索,而不是基于字典有多少项。 –

回答

2

正如威廉·Onsem评论说,最简单的的实现方式是:

any('hello' in val for val in dct.values()) 

any返回true如果任何给定的值的迭代是truthy。

dct.values()返回一个dict_values iterable,它将产生一个字典中的所有值。

'hello' in val for val in dct.values()是发电机表达式产生Truedct每个值'hello'

如果你想知道的钥匙串中,你可以做:

keys = [key for key, value in dct.items() if 'hello' in value] 

在你的情况,keys将是['1']。如果你这样做,那么你可以在布尔上下文中调用该列表,例如if keys: ...

+0

谢谢你总结 – citizen2077

相关问题