2017-10-03 6 views
0

私は次のような辞書を持っています。pythonでregexを使って部分文字列を検出する

myfood = {'yummy tim tam': 1, 'tasty chips': 3, 'yummy': 10, 'a loaf of bread': 5} 

また、次のようなセットもあります。

myset = {'yummy', 'a', 'tasty', 'of', 'delicious', 'yum'} 

は、今私はmyfoodのストリングにmysetの要素を識別し、それらを削除したいです。したがって、私の最後のmyfood辞書は次のようになります。

myfood = {'tim tam': 1, 'chips': 3, 'yummy': 10, 'loaf bread':5} 

注:私は、彼らが完全な文字列である場合myset要素を削除する必要はありません。たとえば、'yummy': 10myfoodは、部分文字列ではなく完全な文字列であるため、削除されません。

私の現在のコードは以下の通りです。

for word in myfood.keys(): 
     if word in myset: 
      #Do nothing 
     else: 
      ######Find the substring part and remove it 

私を助けてください。

答えて

1

部分文字列のみのキー置き換えに使用re.sub

pat = re.compile(r'|'.join([r'(\s|\b){}\b'.format(x) for x in myset])) 

dct = {} 
for k, v in myfood.items(): 
    if k not in myset: # exclude full strings 
     k = pat.sub('', k).strip() 
    dct[k] = v 

print(dct) 
# {'yummy': 10, 'loaf bread': 5, 'tim tam': 1, 'chips': 3} 
関連する問題