2012-04-14 2 views
1

저는 파이썬에 대해 매우 익숙합니다. 명백한 내장 함수가 없다면 용서해주십시오.사전 매핑의 문자열에있는 문자를 대체하십시오.

는 내가 같이 생성 된 사전 매핑이 다음

restAlphaSet 그것을 문자열 목록 (항목) 목록 나는이 모든 대체하는 데 사용할 노력하고 반복

변환입니다

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

내 문자열에있는 문자.

가 매핑 A-> B, B-> A가 들어 있다면, 아무것도 변경되지 얻을 것이다으로
def replace_all(text, dic): 
for i, j in dic.iteritems(): 
    if i != j: 
     text = text.replace(i, j) 
return text 

불행하게도, 이것은 결함이 ㄱ의이 변경됩니다 같이 나는 다음과 같이 보입니다 완전히 대체 기능을 온라인으로 발견 다시 a로.

번역 기능을 찾았지만 사전 입력을 허용하지 않습니다.

+0

'b -> a'매핑을 제거하는 것은 어떻습니까? – cfedermann

+0

예제 함수에 구문 오류가 있습니다. 'i! = j'가 끝에 콜론을 필요로하면, 그렇지 않으면 SyntaxError가 생성됩니다. –

+0

먼저 'IndentationError'로 실패합니다 : –

답변

4

번역이 더 빠릅니다.

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

번역 기능이 이전과 동일한 문제를 가지고있는 것처럼 보입니다. – NickG

+0

@NickG mm .. 문제가 무엇인지 파악할 수 있도록 코드를 게시해야합니다. – luke14free

+0

속도는 빠르지 만 문자 이외의 문자는 사용할 수 없습니다. – Melug

-1

나는, 그러나 그것은 a->bb->a 모두 매핑 사전을 사용하여 응답이 없었다 것, 그것이 오래된 질문입니다 알고 있습니다.

비슷한 기능이 필요했습니다. 작업을 수행 한 트릭은 먼저 교체가 필요한 문자열을 반복 한 다음 각 char이 매핑을 찾는 것입니다.

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 
관련 문제