2016-07-12 6 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

編集 '印刷mydict [キー]' 'に印刷key'を変更します。 –

関連する問題