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

17

假设我有一个字典,

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

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

2个回答

24

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

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

3
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 keyprint mydict[key] - John Gordon

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