从 Python 词典中的每个值中删除标点符号

Remove punctation from every value in Python dictionary

我有一本很长的字典,看起来像这样:

name = 'Barack.'
name_last = 'Obama!'
street_name = "President Streeet?"

list_of_slot_names = {'name':name, 'name_last':name_last, 'street_name':street_name}

我想删除每个插槽(名称,name_last,...)的标点符号。

我可以这样做:

name = name.translate(str.maketrans('', '', string.punctuation))
name_last = name_last.translate(str.maketrans('', '', string.punctuation))
street_name = street_name.translate(str.maketrans('', '', string.punctuation))

你知道更短(更紧凑)的写法吗?

结果:

>>> print(name, name_last, street_name)
>>> Barack Obama President Streeet

使用循环/字典理解

{k: v.translate(str.maketrans('', '', string.punctuation)) for k, v in list_of_slot_names.items()}

如果您想覆盖现有值或分配给新变量,您可以将其分配回 list_of_slot_names

您也可以通过

打印
print(*list_of_slot_names.values())
name = 'Barack.'
name_last = 'Obama!'
empty_slot = None
street_name = "President Streeet?"

print([str_.strip('.?!') for str_ in (name, name_last, empty_slot, street_name) if str_ is not None])
-> Barack Obama President Streeet

除非你也想从中间删除它们。然后这样做

import re

name = 'Barack.'
name_last = 'Obama!'
empty_slot = None
street_name = "President Streeet?"

print([re.sub('[.?!]+',"",str_) for str_ in (name, name_last, empty_slot, street_name) if str_ is not None])
import re, string

s = 'hell:o? wor!d.'

clean = re.sub(rf"[{string.punctuation}]", "", s)

print(clean)

输出

hello world