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

时间:2016-07-12 16:57:52

标签: python list dictionary

假设我有一本字典,

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 个答案:

答案 0 :(得分:8)

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

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

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

var data = [
 {  
   label: "title 1",
   value: 32,
   color: "#444334"
  }, {
   label: "title 2",        
   value: 51,
   color: "#f0f0f0"
  }, {
   label: "title 3",
   value: 17,
   color: "#8ba43a"
}];

答案 1 :(得分: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]