【问题标题】:Best way to check if value in dictionary of lists?检查列表字典中是否有值的最佳方法?
【发布时间】:2017-08-26 20:50:27
【问题描述】:

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

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

检查“你好”是否在我的字典列表中的最快方法是什么

【问题讨论】:

  • any('hello' in val for val in dct.values()).
  • 非常感谢!如果您提交作为答案,我可以接受并投票给您
  • 如果你颠倒数据结构,这会更有效率。 dct = { 'hello': 1, 'goodbye': 1, 'not here': 2, 'definitely not here': 2 } -- 这样它是一个恒定时间的搜索,而不是根据字典有多少项目而花费更长的时间。
  • @Charles:倒排字典不是免费的。
  • @martineau, ...此外,即使修改构建它的过程是不可行的,也可以将其反转一次并以任意便宜的方式搜索该反转结构次数。

标签: python list python-3.x dictionary


【解决方案1】:

正如 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' 所在的dct 的每个值生成True

如果你想知道字符串所在的键,你可以这样做:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2011-06-04
    • 2014-01-14
    相关资源
    最近更新 更多