【问题标题】:Python: Check if a key in a dictionary is contained in a stringPython:检查字典中的键是否包含在字符串中
【发布时间】:2016-07-12 16:57:52
【问题描述】:

假设我有一本字典,

mydict = { "short bread": "bread", 
           "black bread": "bread", 
           "banana cake": "cake", 
           "wheat bread": "bread" }

给定字符串"wheat bread breakfast today",我想检查我的字典中是否有任何键包含在字符串中。如果是这样,我想返回与该键关联的字典中的值。

我想为此使用列表推导。

这是我目前所拥有的。

mykeys = mydict.keys()
mystring = "wheat breads breakfast today"
if any(s in string for s in mykeys):
    print("Yes")

这会按预期输出Yes。我真正想做的是使用s 变量来索引mydict。但是s 在 any() 函数中的作用域是有限的。所以以下不起作用。

if any(s in mystring for s in mykeys):
    print(mydict[s])

有什么解决方法吗?非常感谢!

【问题讨论】:

    标签: python list dictionary


    【解决方案1】:

    只需遍历键并检查每个键。

    for key in mydict:
        if key in mystring:
             print(mydict[key])
    

    如果您想在列表推导中执行此操作,只需在每次迭代时检查键即可。

    [val for key,val in mydict.items() if key in mystring]
    

    您还可以在初始循环中过滤字典键,而不是单独检查。

    for key in (key in mydict if key in mystring):
        print(mydict[key])
    

    如果您想使用它,也可以使用filter

    list(map(mydict.get, filter(lambda x:x in mystring, mydict)))
    

    或者使用过滤器的另一种方式(实际上不要使用这个,它非常不可读,只是为了好玩)。

    list(filter(bool,[v*(k in mystring) for k,v in mydict.items()]))
    

    【讨论】:

      【解决方案2】:
      mydict = { "short bread": "bread", 
                 "black bread": "bread", 
                 "banana cake": "cake", 
                 "wheat bread": "bread" }
      
      s = "wheat bread breakfast today"
      
      for key in mydict:
          if key in s:
              print mydict[key]
      

      【讨论】:

      • 编辑将print key更改为print mydict[key]
      猜你喜欢
      • 2015-11-12
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      相关资源
      最近更新 更多