2013-10-29 3 views

답변

0

내가 사용하는 간단한 해결 방법의 비트 : 검색 문자열이 존재하지 않는 경우에도이 늘 to_replace DICT 더 키 쉽게 확장 될 수

my_string = 'Hello {name}, my name is {my_name}!' 

to_replace = { 
    "search_for" : "replace_with", 
    "name" : "minerz029", 
} 

for search_str in to_replace: 
    my_string = my_string.replace('{' + search_str + '}', to_replace[search_str]) 

print(my_string) 

불평. 그것은 아마도 .format()의 기능을 더 많이 제공하기 위해 향상 될 수 있지만, 저에게는 충분했습니다.

14

당신은 당신이 볼 수 있듯이 한 번 포맷 한 후, 외부 {}를 제거하고 {{my_name}}{my_name}을하게되며,이

>>> my_string = 'Hello {name}, my name is {{my_name}}!' 
>>> my_string.format(name='minerz029') 
'Hello minerz029, my name is {my_name}!' 

처럼 이중 중괄호를 사용하여 my_name을 피할 수 있습니다. 나중에 my_name를 포맷 할 경우이

>>> my_string = 'Hello {name}, my name is {{my_name}}!' 
>>> my_string = my_string.format(name='minerz029') 
>>> my_string 
'Hello minerz029, my name is {my_name}!' 
>>> my_string.format(my_name='minerz029') 
'Hello minerz029, my name is minerz029!' 
+1

하지만 나중에 .format()''my_name'이 필요합니다. – minerz029

6

Python3.2 +가 format_map있다처럼, 당신은 단순히 당신이 여분의 추가 할 필요는 없습니다 지금이

>>> class D(dict): 
...  def __missing__(self, k):return '{'+k+'}' 
... 
>>> my_string = 'Hello {name}, my name is {my_name}!' 
>>> my_string.format_map(D(name='minerz029')) 
'Hello minerz029, my name is {my_name}!' 
>>> _.format_map(D(my_name='minerz029')) 
'Hello minerz029, my name is minerz029!' 

을 수행 할 수있는, 다시 포맷 할 수 있습니다 {} , D에 입력 한 키만 대체됩니다.

@steveha가 지적한 것처럼, 이전 Python3을 사용하고 있다면 여전히 사용할 수 있습니다

my_string.format(**D(name='minerz029')) 
+0

방금 ​​테스트 했으므로'str.format_map (d)'을 사용할 필요가 없습니다. 당신은'str.format (** d)'를 사용할 수 있으며 잘 동작합니다. 그러나'.format_map()'은 dict의 복사본을 만들 필요가 없으므로보다 효율적입니다. – steveha

+0

@steveha, Python2에서 여전히'dict'으로 변환하지만, Python3에서는 괜찮습니다. –

+0

맞습니다 ... Python3에서 테스트했습니다. Python2에는'.format_map()'이 없습니다. 방금'.format_map()'을 가진 파이썬 버전에서 대신 실제로'str.format (** d)'를 사용할 수 있음을 의미합니다. 죄송합니다. – steveha

관련 문제