这是我的问题。
sentence = "This car is awsome."
我想做的是
sentence.replace("a","<emoji:a>")
sentence.replace("b","<emoji:b>")
sentence.replace("c","<emoji:c>")
以此类推...
当然,如果我这样做,"<emoji:>"
中的字母也将随着我的替换而被替换。那我该怎么办呢?
答案 0 :(得分:2)
如Carlos Gonzalez所建议:
创建一个映射字典,并将其依次应用于每个字符:
sentence = "This car is awsome."
# mapping
up = {"a":"<emoji:a>",
"b":"<emoji:b>",
"c":"<emoji:c>",}
# apply mapping to create a new text (use up[k] if present else default to k)
text = ''.join( (up.get(k,k) for k in sentence) )
print(text)
输出:
This <emoji:c><emoji:a>r is <emoji:a>wsome.
''.join( ... generator ...)
内部的生成器表达式的优点在于,它接受sentence
的每个单个字符并将其保留或替换。它只触及每个字符一次,因此不存在多重替换的危险,sentence
仅需传递一次即可转换整个对象。
Doku:dict.get(key,default)和Why dict.get(key) instead of dict[key]?
如果您使用
sentence = sentence.replace("a","o")
sentence = sentence.replace("o","k")
您首先要从o
制作a
,然后再从任何k
(或之前的o
)制作a
-您必须触摸每个角色两次才能实现。
使用
up = { "a":"o", "o":"k" }
text = ''.join( (up.get(k,k) for k in sentence) )
避免这种情况。
答案 1 :(得分:1)
如果您想一次替换多个字符,则使用正则表达式会更容易。受Passing a function to re.sub in Python
的启发import re
sentence = "This car is awsome."
up = {"is":"Yippi",
"ws":"WhatNot",}
# modified it to create the groups using the dicts key
text2 = re.sub( "("+'|'.join(up)+")", lambda x: up[x.group()], sentence)
print(text2)
输出:
ThYippi car Yippi aWhatNotome.
Doku:re.sub(pattern, repl, string, count=0, flags=0)
如果您想使用特定于“ regex”的特定字符,这些字符在用作正则表达式模式时会特别注意,则必须格外小心。 .+*?()[]^$