2013-10-29 8 views
6

क्या केवल कुछ चाबियों को प्रतिस्थापित करने के लिए पाइथन के str.format(key=value) वाक्यविन्यास का उपयोग करना संभव है।मैं प्रारूप स्ट्रिंग से कैसे बच सकता हूं?

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

my_string = my_string.format(name='minerz029') 

जो रिटर्न

KeyError: 'my_name' 

वहाँ इस लक्ष्य को हासिल करने के लिए एक रास्ता है:

इस उदाहरण पर विचार?

उत्तर

0

एक सरल समाधान का जो मैं उपयोग के बारे में थोड़ी:

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) 

यह to_replace dict में अधिक कुंजी के साथ आसानी से विस्तार किया जा सकता है और अभ्यस्त शिकायत भले ही खोज स्ट्रिंग मौजूद नहीं है। यह शायद .format() की सुविधाओं की पेशकश के लिए बेहतर किया जा सकता है, लेकिन यह मेरे लिए पर्याप्त था।

14

आप डबल घुंघराले कोष्ठक का उपयोग कर, इस

>>> 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_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 पर हैं 0
my_string.format(**D(name='minerz029')) 
+0

मैंने अभी इसका परीक्षण किया है, और आपको 'str.format_map (d)' का उपयोग करने की आवश्यकता नहीं है; आप 'str.format (** d) 'का उपयोग कर सकते हैं और यह ठीक काम करता है। हालांकि, '.format_map()' अधिक कुशल है क्योंकि इसे dict की एक प्रति बनाने की आवश्यकता नहीं है। – steveha

+0

@steveha, Python2 में अभी भी इसे 'dict' में परिवर्तित कर देता है, लेकिन यह Python3 –

+0

के लिए ठीक काम करता है ... मैंने पायथन 3 में परीक्षण किया। Python2 में '.format_map()' नहीं है। मेरा मतलब था कि पायथन संस्करणों में '.format_map()' है, आप वास्तव में 'str.format (** d)' का उपयोग कर सकते हैं और यह भी काम करेगा। उस वर्तनी के लिए खेद है। – steveha

संबंधित मुद्दे