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))
但我正在寻找的东西,会清理整个名单。
你只是想:
后的子字符串,所以要么分裂将让我们的子还是什么都不会被删除,如果有字符串中没有:
:
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时应用相同的逻辑,以避免在已经分配字典值之后迭代并更改字典值。
也许你应该提到'.strip()'清除任何前导或尾随空格。 –
@ PM2Ring,是的,改为lstrip并添加了一个注释。 –
更好。 :) FWIW,虽然'.lstrip'在这里效率更高,但我可能只是使用'.strip' - 但我想这取决于输入数据的干净程度,如果你想保留那些可能的尾部空格数据。 –
for em in dict:
if ":" in dict[em]
a=dict[em].split(":")
a.remove(a[0])
print(a)
这里试试这个代码
'a.remove(a [0])'效率低下。另外,OP需要字典(或defaultdict)中的数据,他不只是想打印它。 –
我说过[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']}
如何分配的值defaultdict? –