2012-04-14 80 views
1

我对Python很新,所以如果我缺少一个明显的内置函数,请原谅我。从字典映射中替换字符串中的字符

我有我等产生的字典映射如下:

dictionary = dict(zip(restAlphaSet,list(item))) 

其中restAlphaSet一个字符串和列表(项目)的列表转换迭代

我想用这个来代替所有的我的字符串中的字符。我发现了一个函数的replaceAll网上,看起来像下面这样:

def replace_all(text, dic): 
for i, j in dic.iteritems(): 
    if i != j: 
     text = text.replace(i, j) 
return text 

不幸的是,这是有缺陷的,仿佛映射有A-> B,B-> A,那么什么都不会得到改变为B的将被改变回到a。

我发现翻译功能,但它不接受字典输入。

+0

除去'b - > a'映射怎么样? – cfedermann 2012-04-14 17:29:39

+0

您的示例函数中存在语法错误。 '如果我!= j'最后需要一个冒号,否则它会产生一个SyntaxError。 – 2012-04-14 17:31:42

+0

首先它会因'IndentationError' :)而失败:) – 2012-04-14 17:35:08

回答

4

翻译速度更快。

>>> import string 
>>> text.translate(string.maketrans("".join(restAlphaSet),"".join(item))) 
+0

看起来翻译功能与以前相同的问题在于它将字符改回原来的状态。 – NickG 2012-04-14 18:48:28

+0

@NickG mm ..它必须是你的代码的问题,发布它,以便我们可以找出问题所在。 – luke14free 2012-04-14 21:20:32

+0

它速度很快,但除了角色之外无法工作。 – Melug 2012-10-10 06:21:16

-1

我意识到这是一个老问题,但它似乎有使用字典,映射两个a->bb->a没有答案。

我需要一个类似的函数,而做了一项工作的诀窍是首先遍历我们需要替换的字符串,然后为每个字符查找映射。

def replace_all(text, dic): 
    new_text = "" 
    for char in text: 
     for i, j in dic.iteritems(): 
      if char == i: 
       new_text += j 
return new_text