在python

时间:2017-10-03 11:59:19

标签: python regex

我有一本字典如下。

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

我也有一套如下。

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

现在,我想在myset的子字符串中标识myfood的元素并将其删除。因此,我的最终myfood字典应如下所示。

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

注意:如果myset元素是完整字符串,我不想删除它们。例如,'yummy': 10中的myfood未被删除,因为它不是子字符串,而是完整的字符串。

我目前的代码如下。

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

请帮帮我。

1 个答案:

答案 0 :(得分: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}