2015-07-19 5 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 любые ведущие пробелы из подстроки после расщепления.

Вы также можете применить ту же логику, что и вы добавляете данные к своему умолчанию, чтобы избежать необходимости повторять и изменять значения бита после того, как они уже были назначены.

+2

Может быть, вы должны упомянуть, что '.strip()' очищает любые ведущие или конечные пробелы. –

+0

@ PM2Ring, yep, изменено на lstrip и добавлено примечание. –

+1

Еще лучше. :) FWIW, я бы, вероятно, просто использовал '.strip', хотя' .lstrip' здесь более эффективен, но я думаю, это зависит от того, насколько чисты входные данные, и если вы хотите сохранить возможные конечные пробелы в этом данные. –

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 хочет данные в dict (или defaultdict), он не просто хочет его распечатать. –

+0

я сказал [em] .split? –

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: [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']} 
Смежные вопросы