Python:检查字典中的键是否包含在字符串中

Python:检查字典中的键是否包含在字符串中,python,list,dictionary,Python,List,Dictionary,假设我有一本字典 mydict = { "short bread": "bread", "black bread": "bread", "banana cake": "cake", "wheat bread": "bread" } 给定字符串“今日小麦面包早餐”我想检查字符串中是否包含字典中的任何键。如果是这样,我想返回字典中与该键关联的值 我想用一个列表来理解这一点 这是我到目前为止所拥有的 mykeys = mydic

假设我有一本字典

mydict = { "short bread": "bread", 
           "black bread": "bread", 
           "banana cake": "cake", 
           "wheat bread": "bread" }
给定字符串
“今日小麦面包早餐”
我想检查字符串中是否包含字典中的任何键。如果是这样,我想返回字典中与该键关联的值

我想用一个列表来理解这一点

这是我到目前为止所拥有的

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])

有解决办法吗?非常感谢

只需在键之间循环并检查每个键即可

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])
或者,如果您想让它发挥作用,也可以使用
过滤器

list(map(mydict.get, filter(lambda x:x in mystring, mydict)))
或者使用过滤器的另一种方式(实际上不要使用这个,它是超级不可读的,只是为了好玩)


编辑以将
print key
更改为
print mydict[key]
list(filter(bool,[v*(k in mystring) for k,v in mydict.items()]))
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]