2015-03-13 8 views
6

मैं एक स्ट्रिंग को प्रारूपित करना चाहता हूं और डॉट ऑपरेटर का उपयोग करने में सक्षम होना चाहता हूं, ताकि मैं टेम्पलेट स्ट्रिंग्स बना सकूं। {user.name}, {product.price}पायथन प्रारूप तारों में एक बिंदु का उपयोग कैसे करें?

'Hello {user.name}'.format({'user': { 'name': 'Markus' } }) 
KeyError: 'user' 

'Hello {user.name}'.format(**{'user': { 'name': 'Markus' } }) 
AttributeError: 'dict' object has no attribute 'name' 

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

मैं इस की कोशिश की?

उत्तर

7

पाइथन dict दुर्भाग्य से दुर्भाग्य से विशेषता नहीं है (यानी डॉट नोटेशन के साथ) डिफ़ॉल्ट रूप से। तो आप अपने आप को भद्दा कोष्ठक अंकन करने के लिए इस्तीफा देने के कर सकते हैं या तो:

'Hello {user[name]}'.format(**{'user': { 'name': 'Markus' } }) 

या आप एक डॉट सुलभ वस्तु में अपने डेटा को लपेट कर सकते हैं। PyPI, जैसे कि stuf से आप कुछ हद तक विशेषता-सुलभ शब्दकोश कक्षाएं इंस्टॉल कर सकते हैं।

from stuf import stuf 

'Hello {user.name}'.format(**stuf({'user': { 'name': 'Markus' } })) 

मैं stuf वस्तुओं में मेरे संग्रह रखने के लिए इतना है कि मैं आसानी से उन्हें विशेषता के आधार पर उपयोग कर सकते हैं करते हैं।

+0

'stuf' क्या है? – jonrsharpe

+0

'stuf' एक' dict' subclass है जो विशेषता-सुलभ है। पूर्ण मॉड्यूल विवरण के लिए लिंक देखें। –

+0

आह, मैं देखता हूं; साफ! – jonrsharpe

1

कम से कम परिवर्तन नहीं बल्कि एक अवधि को छोड़कर, अपने टेम्पलेट में वर्ग कोष्ठक का उपयोग करने के लिए है:

   # v Note 
>>> 'Hello {user[name]}'.format(**{'user': {'name': 'Markus'}}) 
'Hello Markus' 

वैकल्पिक रूप से, वस्तुओं कि वास्तव में शब्दकोश में उस विशेषता है, उदाहरण के लिए डाल दिया एक कस्टम वर्ग या collections.namedtuple:

>>> class User(object): 
    def __init__(self, name): 
     self.name = name 


>>> 'Hello {user.name}'.format(**{'user': User('Markus')}) 
'Hello Markus' 

भी ध्यान रखें कि यदि आप शाब्दिक एक कीवर्ड तर्क तुम सिर्फ उपयोग कर सकते हैं बाहर लिख रहे हैं:

>>> 'Hello {user.name}'.format(user=User('Markus')) 
'Hello Markus' 
संबंधित मुद्दे