Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-如何从列表中删除特定单词?_Python_Regex_Python 3.x_Replace - Fatal编程技术网

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

Python-如何从列表中删除特定单词?,python,regex,python-3.x,replace,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.

我有这样一个清单:

 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']})
我知道我可以从特定列表项中删除单词,如:

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': ['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值之后必须迭代和修改这些值

for em in dict:

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

在此处尝试此代码

类似于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']}

如何将值分配给defaultdict?也许您应该提到,
.strip()
会清除任何前导或尾随空格。@PM2Ring,是的,更改为lstrip并添加了注释。更好的是:)FWIW,我可能只会使用
.strip
,尽管
.lstrip
在这里效率更高,但我想这取决于输入数据的干净程度,以及您是否希望在该数据中保留可能的尾随空格。
a.remove(a[0])
效率低下。此外,OP希望数据在dict(或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: 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']}