python - आदेश दिया गया समझदारी




dictionary cpython (2)

क्या मैं अन्य डिक्ट्स के लिए दंड समझने के लिए पायथन में सिंटैक्स का विस्तार कर सकता हूं, जैसे collections मॉड्यूल में ऑर्डर्ड डिक्ट या मेरे स्वयं के प्रकार जो नियम से प्राप्त होते हैं?

बस ताना नाम को पुनर्निर्मित करना स्पष्ट रूप से काम नहीं करता है, {key: value} समझ वाक्यविन्यास अभी भी आपको समझ और साहित्य के लिए एक सादा पुराना नियम देता है।

>>> from collections import OrderedDict
>>> olddict, dict = dict, OrderedDict
>>> {i: i*i for i in range(3)}.__class__
<type 'dict'>

तो, अगर यह संभव है तो मैं ऐसा करने के बारे में कैसे जाऊं? यह ठीक है अगर यह केवल सीपीथन में काम करता है। वाक्यविन्यास के लिए मुझे लगता है कि मैं इसे O{k: v} उपसर्ग के साथ r'various' u'string' b'objects' जैसा कि हमारे पास r'various' u'string' b'objects'

नोट: बेशक हम इसके बजाय जनरेटर अभिव्यक्ति का उपयोग कर सकते हैं, लेकिन मुझे यह देखने में अधिक दिलचस्पी है कि व्याकरण के मामले में हैक करने योग्य पायथन कैसा है।


@ मैक्स नोएल की प्रतिक्रिया को थोड़ा सा संशोधित करने के लिए, आप ऑर्डरर्ड डिक्टेंट को आदेशित तरीके से बनाने के लिए जेनरेटर की बजाय सूची समझ का उपयोग कर सकते हैं (जो निश्चित रूप से dict समझ का उपयोग करके संभव नहीं है)।

>>> OrderedDict([(i, i * i) for i in range(5)])
OrderedDict([(0, 0), 
             (1, 1), 
             (2, 4), 
             (3, 9), 
             (4, 16)])

क्षमा करें, संभव नहीं है। डिक्ट लिटल्स और डॉक समझें अंतर्निहित dict प्रकार के लिए नक्शा बनाती हैं, जिस तरह से सी स्तर पर हार्डकोड किया जाता है। इसे ओवरराइड नहीं किया जा सकता है।

आप इसे एक विकल्प के रूप में उपयोग कर सकते हैं, यद्यपि:

OrderedDict((i, i * i) for i in range(3))

अनुपूरक: पायथन 3.6 के रूप में, सभी पायथन शब्दकोशों का आदेश दिया जाता है। 3.7 के रूप में, यह भाषा की कल्पना का भी हिस्सा है। यदि आप पाइथन के उन संस्करणों का उपयोग कर रहे हैं, ऑर्डर्ड डिक्ट की कोई ज़रूरत नहीं है: dict समझदारी केवल कार्य (टीएम) होगी।







dictionary-comprehension