2016-07-12 26 views
2

假设我有一本字典,的Python:检查是否在字典中的密钥包含在一个字符串

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

任何解决方法?非常感谢!

回答

5

只需循环按键并检查每一个。

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()])) 
1
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] 
+0

编辑以打印key'改变''到打印mydict [键]'。 –

相关问题