删除Python字典中每个值的点状标记

2024-09-30 08:22:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

我想删除每个插槽的穿孔(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

Tags: ofnamestreetstring字典translatelistlast
2条回答
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])

使用循环/字典理解

{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())

相关问题 更多 >

    热门问题