2015-07-19 295 views
2

我有這樣一個清單: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? –

回答

4

你只是想:後的子字符串,所以要麼分裂將讓我們的子還是什麼都不會被刪除,如果有字符串中沒有:

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' - 但我想這取決於輸入數據的乾淨程度,如果你想保留那些可能的尾部空格數據。 –

0
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? –

0

類似帕德里克·坎寧安響應,但與正則表達式:

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']}