Python - 如何从列表中删除特定单词?

时间:2015-07-19 11:16:11

标签: python regex python-3.x replace

我有一个列表:

 defaultdict(<class 'list'>, {'Web': ['site: www.domain.com'], 'Phone': ['(111) 222-333', '(222) 333-444'], 'VAT': ['987654321'], 'Fax': ['(444) 555-666', '(777) 888-999'], 'E-mail': ['adress: mail@domain.com', 'address: mail2@domain.com'], 'ID': ['number:1234567890']})

我希望清除以下字词:site:adress: number:

输出应为:

 defaultdict(<class 'list'>, {'Web': ['www.domain.com'], 'Phone': ['(111) 222-333', '(222) 333-444'], 'VAT': ['987654321'], 'Fax': ['(444) 555-666', '(777) 888-999'], 'E-mail': ['mail@domain.com', 'mail2@domain.com'], 'ID': ['1234567890']})

我知道我可以删除特定列表项中的字词,如:

for em in d["E-mail"]:
    print(em.replace("address: ","",1))

但我正在寻找可以清理整个清单的东西。

3 个答案:

答案 0 :(得分:4)

您只需要:之后的子字符串,因此,如果字符串中没有:,则拆分将获取子字符串,否则不会删除任何内容:

for k,v in d.items():
    d[k] = [s.split(":", 1)[-1].lstrip() for s in v ]

print(d)

输出:

{'E-mail': ['mail@domain.com', 'mail2@domain.com'], 'Phone': ['(111) 222-333', '(222) 333-444'], 'ID': ['1234567890'], 'Web': ['www.domain.com'], 'VAT': ['987654321'], 'Fax': ['(444) 555-666', '(777) 888-999']}

使用[-1]作为索引意味着我们要么得到两个中的第二个,要么是没有任何分割的唯一字符串。分裂后我们还需要lstrip子串中的任何前导空格。

您也可以应用与向defaultdict添加数据相同的逻辑,以避免在已经分配dict值之后迭代并改变它们。

答案 1 :(得分:0)

for em in dict:

   if ":" in dict[em]
   a=dict[em].split(":")
   a.remove(a[0])
   print(a)

在此处试用此代码

答案 2 :(得分:0)

类似于Padraic Cunningham的反应,但有正则表达式:

In [39]: import re

In [40]: s = re.compile('[a-zA-Z]+:\s?')

In [41]: d={'Web': ['site: www.domain.com'], 'Phone': ['(111) 222-333', '(222) 333-444'], 'VAT': ['987654321'], 'Fax': ['(444) 555-666', '(777) 888-999'], 'E-mail': ['adress: mail@domain.com', 'address: mail2@domain.com'], 'ID': ['number:1234567890']}

In [42]: def clean(dict_):
   ....:     for k, v in dict_.items():
   ....:         dict_[k] = map(lambda x: s.sub('', x), v)
   ....:

In [43]: clean(d)
Out[43]:
{'E-mail': ['mail@domain.com', 'mail2@domain.com'],
 'Fax': ['(444) 555-666', '(777) 888-999'],
 'ID': ['1234567890'],
 'Phone': ['(111) 222-333', '(222) 333-444'],
 'VAT': ['987654321'],
 'Web': ['www.domain.com']}