python - 如何更有效地将字符串中的多个字符映射为单个字符?

标签 python python-3.x string dictionary replace

我正在寻找一种将字符组映射到单个字符的有效方法。

目前,我的代码类似于以下内容:

example = 'Accomodation'

VOWELS = 'aeiou'
CONSONANTS = 'bcdfghjklmnpqrstvwxyz'

output = ''
for char in example:
    if char in VOWELS:
        output += 'v'
    elif char in VOWELS.upper():
        output += 'V'
    elif char in CONSONANTS:
        ....

最终它会返回,在这个例子中,Vccvcvcvcvvc

我想让这部分更有效率:

for char in example:
    if char in VOWELS:
        output += 'v'
    elif char in VOWELS.upper():
        output += 'V'
    elif char in CONSONANTS:
        ....

理想情况下,该解决方案将允许将字符字典映射为键,它们的值是选项列表。例如

replace_dict = {'v': VOWELS,
                'V': VOWELS.upper(),
                'c': CONSONANTS,
                ...

我不太熟悉 map,但我希望解决方案能以某种方式利用它。

研究

我在这里发现了类似的问题:python replace multiple characters in a string

该问题的解决方案表明我需要类似的东西:

target = 'Accomodation'
charset = 'aeioubcdfghjklmnpqrstvwxyzAEIOUBCDFGHJKLMNPQRSTVWXYZ'
key = 'vvvvvcccccccccccccccccccccVVVVVCCCCCCCCCCCCCCCCCCCCC'

但是,我不认为赋值看起来特别清楚——尽管它节省了一段 if/else 语句。此外,如果我想添加更多字符集,分配的可读性会更差,例如针对不同的外文字符集。


任何人,也许对内置函数有更好的了解,都可以提供一个比上述两个示例更有效/更干净的示例吗?

我也乐于接受其他不需要使用字典的想法。

解决方案应该在python3中。

最佳答案

创建这样一个字典有更有效的方法:

example = 'Accomodation'

VOWELS = 'aeiou'
CONSONANTS = 'bcdfghjklmnpqrstvwxyz'

replace_dict = {
    **{v: 'v' for v in VOWELS},
    **{V: 'V' for V in VOWELS.upper()},
    **{c: 'c' for c in CONSONANTS}
}

print(''.join(replace_dict[s] for s in example))

# Vccvcvcvcvvc

关于python - 如何更有效地将字符串中的多个字符映射为单个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55018788/

相关文章:

python - 如果 numpy 数组索引不存在则设置 none

python - Flask 静态文件 Cache-Control

c# - 如何在没有货币格式的情况下将字符串解析为 float ?

c - 将各种数据类型的值编码为二进制文件(python),然后在c中解码它们

python - 冷冻 Python 中的 Scipy : Cannot import name nonlin

c - C中String tokenizer的奇怪行为

java - 在 Java 中将十六进制字符串转换为字符串的最佳方法?

python - 如何更改 Tkinter ScrolledText 小部件的滚动条颜色?

python - 从字符串中删除尾随空格的 pythonic 方法是什么?

python - 比较 2 个 csv 文件之间的列并使用 Python 写入差异