Как убрать пунктуацию в словаре - PullRequest
0 голосов
/ 21 октября 2018

У меня есть словарь, где ключ - это строка, а значения - это список строк.Я пытался убрать знаки препинания с помощью strings.punctuations из import strings модуля.

>>> dat = {'2008':['what!','@cool','#fog','@dddong'],'2010':['hey','@cute']}
>>> 

>>> def remove_punct(data):
...     import string
...     punct = string.punctuation
...     rpunct = punct.replace('@',"") # withold @
...     for k,v in data.items():
...         for word in data[k]:
...             word = word.strip(rpunct)
...     return data
... 
>>> remove_punct(dat)
{'2008': ['what!', '@cool', '#fog', '@dddong'], '2010': ['hey', '@cute']}

Почему я не получу результат с # и!удален?

Нужно ли снова определять словарь после word.strip(rpunct) ...?

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

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

>>> dat = {'2008':['what!','@cool','#fog','@dddong'],'2010':['hey','@cute']}
>>> 
>>> def remove_punct(data):
...     import string
...     new_data = {} # the data we will return
...     punct = string.punctuation
...     rpunct = punct.replace('@',"") # withold @
...     for k,v in data.items():
...         new_data[k] = []
...         for word in data[k]:
...             new_data[k].append(word.strip(rpunct))
...     return new_data
... 
>>> remove_punct(dat)
{'2008': ['what', '@cool', 'fog', '@dddong'], '2010': ['hey', '@cute']}

или несколькими строками:

>>> from string import punctuation
>>> rpunct = punctuation.replace('@',"") # withold @
>>> new_data = {k: [word.strip(rpunct) for word in dat[k]] for k in dat}
0 голосов
/ 21 октября 2018

Я использовал другую замену регулярных выражений для удаления знаков препинания.

  • \ w будет соответствовать буквенно-цифровым символам и подчеркиванию
  • [^ \ w] будет соответствовать всему, что не является буквенно-цифровым или подчеркиванием

Вы даже ненужно обернуть его в функцию, вы можете обновить dict напрямую, используя код ниже:

import re

for key in dat.keys():
    dat[key] = [re.sub(r'[^\w]', ' ', i) for i in dat[key]]
...