2009-04-05 11 views
6

मैंने देखा है (और लिखा है) इसके कई कार्यान्वयन। क्या कोई ऐसा है जिसे सर्वश्रेष्ठ माना जाता है या मानक के रूप में उभर रहा है?पायथन में सबसे अच्छा आदेश दिया गया dict कार्यान्वयन क्या है?

आदेश दिया गया आदेश द्वारा मेरा क्या मतलब है कि ऑब्जेक्ट में इसमें कुंजी के क्रम की कुछ अवधारणा है, जो PHP में एक सरणी के समान है।

PEP 372 से ओडिक्ट एक मजबूत उम्मीदवार की तरह लगता है, लेकिन यह पूरी तरह से स्पष्ट नहीं है कि यह विजेता है।

+2

-1: "सर्वश्रेष्ठ" अपरिभाषित है। –

उत्तर

8

मैंने मानक नहीं देखा है; हर कोई अपना खुद का रोल लगता है (this question के जवाब देखें)। यदि आप पीईपी 372 से OrderedDictpatch का उपयोग कर सकते हैं, तो यह आपकी सबसे अच्छी शर्त है। Stdlib में शामिल कुछ भी है जो अब से हर साल एक या दो का उपयोग करने का एक बहुत अधिक अवसर है।

12

रेमंड Hettinger द्वारा यह एक collections.OrderedDict के लिए एक ड्रॉप में स्थानापन्न कि अजगर 2.7 में दिखाया जाएगा: http://pypi.python.org/pypi/ordereddict

संग्रह डॉक्स कहते हैं कि यह क्या अजगर 2.7 में हो जाएगा के बराबर है की देव संस्करण, तो शायद यह पाइथन के साथ आने वाले व्यक्ति के लिए एक चिकनी संक्रमण होने की संभावना है।

मैं इसे PyPI में डाल दिया है, तो आप easy_install ordereddict साथ स्थापित कर सकते हैं, और इसलिए की तरह उपयोग: collections मॉड्यूल में

from ordereddict import OrderedDict 
d = OrderedDict([("one", 1), ("two", 2)]) 
+0

रेमंड हेटिंगर द्वारा आदेश दिया गया संग्रह संग्रह से छोटे और अधिक सुरुचिपूर्ण दिखता है। ऑर्डर्ड डिक्ट। मैं सोच रहा था कि संग्रह में क्या है। ऑर्डर्ड डिक्ट रेमंड के मुकाबले बेहतर है। मानक पैकेज में से एक दूसरे के जितना अच्छा नहीं है? – FrostNovaZzz

+0

@FrostNovaZzz संग्रह। ऑर्डर्ड डिक्ट ने अब तक और अधिक उपयोग देखा है, इसलिए मुझे उम्मीद है कि "सुरुचिपूर्ण" अंतर वास्तव में बग फिक्स हैं। – shoyer

1

अजगर 2.7 और बाद में है OrderedDict, तो आपको लगता है कि के रूप में विचार करना चाहिए 'मानक'। यदि इसकी कार्यक्षमता पर्याप्त है तो आपको शायद इसका उपयोग करना चाहिए।

हालांकि इसका कार्यान्वयन दृष्टिकोण न्यूनतम है और यदि यह पर्याप्त नहीं है तो आपको फोरॉर्ड/लारोसा या ordereddict (मेरे द्वारा) odict पर देखना चाहिए क्योंकि उस मामले में वे बेहतर फिट हैं। दोनों कार्यान्वयन collections.OrderedDict द्वारा प्रदान की गई कार्यक्षमता का एक सुपरसेट है। दोनों के बीच का अंतर, odict शुद्ध पायथन और ordereddict एक बहुत तेज C एक्सटेंशन मॉड्यूल है।

एक न्यूनतम दृष्टिकोण आवश्यक नहीं है भले ही यह आपको आवश्यक सभी कार्यक्षमता प्रदान करता हो: उदा। collections.OrderedDict में bug में repr()OrderedDict के अपने मूल्यों में से एक में घोंसला लौटने पर प्रारंभ मेंथा। एक बग जो पहले पाया जा सकता था, सबसेट था, छोटे सबसेट ऑर्डर्डडिक्ट पुराने ordereddict के unittests का उपयोग कर सकते हैं।

+0

आपके काम के लिए धन्यवाद, एंथॉन! मैं आपका आदेश देने का प्रयास कर रहा था, लेकिन आपकी वेबसाइट पर ज़िप और टैर अभिलेखागार दोनों मर गए थे। इसके अतिरिक्त, मैं थोड़ा चिंतित हूं कि यह परियोजना अभी भी जीवित है? मेरा मतलब है, क्या इसे भविष्य के पायथन के साथ अपडेट किया जाएगा? इसके अलावा, शायद इसे पीआईपी पर डालने से यह और अधिक लोकप्रिय हो सकता है?मुझे आपकी वेबसाइट पर 7 गुना तेजी दिखाई देती है, यह सुनिश्चित नहीं है कि क्यों पाइथन डेवलपर्स ने इस कार्यान्वयन को पायथन के डिफ़ॉल्ट के रूप में नहीं चुना है। – jichi

+0

@ जिची मैं 'ऑर्डरडिक्ट' को [बिटबकेट] (https://bitbucket.org/ruamel/ordereddict) पर ले जाने की प्रक्रिया में हूं और इसे 'पीपी' के साथ इंस्टॉल करने योग्य बनाता हूं। टैट के बाद मैं पाइथन 3.X संगतता (शायद एक स्ट्रिपेड डाउन वर्जन पर आधारित होगा, कार्यक्षमता के साथ कार्यक्षमता के साथ। ऑर्डर्ड डिक्ट)। वेबसाइट पर लिंक फिर से काम करना चाहिए। – Anthon

+0

बढ़िया, लिंक अब काम करते हैं। आपके काम के लिए धन्यवाद! – jichi

2

collections.OrderedDict अब व्यापक रूप से उपलब्ध होना चाहिए, लेकिन यदि प्रदर्शन चिंता का विषय है, तो आप वैकल्पिक रूप से मेरे पैकेज cyordereddict का उपयोग करने पर विचार कर सकते हैं। यह सिथॉन के मानक लाइब्रेरी के ऑर्डर्ड डिक्ट का सीधा बंदरगाह है जो 2-6x तेज है।

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