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

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

问题描述:

我有这样一个清单:Python - 如何从列表中删除特定的单词?

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: [email protected]', 'address: [email protected]'], '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': ['[email protected]', '[email protected]'], 'ID': ['1234567890']}) 

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

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

但我正在寻找的东西,会清理整个名单。

+0

如何分配的值defaultdict? –

你只是想:后的子字符串,所以要么分裂将让我们的子还是什么都不会被删除,如果有字符串中没有:

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

print(d) 

输出:

{'E-mail': ['[email protected]', '[email protected]'], '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时应用相同的逻辑,以避免在已经分配字典值之后迭代并更改字典值。

+2

也许你应该提到'.strip()'清除任何前导或尾随空格。 –

+0

@ PM2Ring,是的,改为lstrip并添加了一个注释。 –

+1

更好。 :) FWIW,虽然'.lstrip'在这里效率更高,但我可能只是使用'.strip' - 但我想这取决于输入数据的干净程度,如果你想保留那些可能的尾部空格数据。 –

for em in dict: 

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

这里试试这个代码

+2

'a.remove(a [0])'效率低下。另外,OP需要字典(或defaultdict)中的数据,他不只是想打印它。 –

+0

我说过[em] .split? –

类似帕德里克·坎宁安响应,但与正则表达式:

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: [email protected]', 'address: [email protected]'], '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': ['[email protected]', '[email protected]'], 
'Fax': ['(444) 555-666', '(777) 888-999'], 
'ID': ['1234567890'], 
'Phone': ['(111) 222-333', '(222) 333-444'], 
'VAT': ['987654321'], 
'Web': ['www.domain.com']}