एक आदेशित शब्दकोश (OD) को इनिशियलाइज़ करने का सही तरीका क्या है ताकि यह प्रारंभिक डेटा के क्रम को बरकरार रखे?
from collections import OrderedDict
# Obviously wrong because regular dict loses order
d = OrderedDict({'b':2, 'a':1})
# An OD is represented by a list of tuples, so would this work?
d = OrderedDict([('b',2), ('a', 1)])
# What about using a list comprehension, will 'd' preserve the order of 'l'
l = ['b', 'a', 'c', 'aa']
d = OrderedDict([(i,i) for i in l])
सवाल:
OrderedDict
प्रारंभ के समय उत्तीर्ण (2 और 3 उदाहरण ऊपर) tuples की सूची, या tuples या tuple of tuples या सूचियों की tuple या सूचियों आदि की सूची को संरक्षित करेगा ?यदि
OrderedDict
वास्तव में कोई आदेश बनाए रखता है, तो सत्यापन के बारे में कैसे जाना जाता है? चूँकि एकdict
अप्रत्याशित आदेश दिया गया है, क्या होगा यदि मेरे परीक्षण वैक्टर सौभाग्य से एक प्रारंभिक आदेश एक अप्रत्याशित आदेश के समान है? उदाहरण के लिए, अगरd = OrderedDict({'b':2, 'a':1})
मैं लिखने के बजायd = OrderedDict({'a':1, 'b':2})
, मैं गलत तरीके से निष्कर्ष निकाल सकता हूं कि आदेश संरक्षित है। इस मामले में, मुझे पता चला कि एकdict
वर्णानुक्रम में क्रमबद्ध है, लेकिन यह हमेशा सच नहीं हो सकता है। यह सत्यापित करने के लिए कि डेटा संरचना ऑर्डर को सुरक्षित रखती है या नहीं, एक बार टूटने तक परीक्षण वैक्टर को बार-बार आज़माने से कम करने के लिए काउंटरटेम्पल का उपयोग करने का एक विश्वसनीय तरीका क्या है?
PS मैं इसे केवल संदर्भ के लिए यहां छोड़ दूंगा: "ऑर्डर किए गए निर्माता और अपडेट () विधि दोनों ही कीवर्ड तर्कों को स्वीकार करते हैं, लेकिन उनका क्रम खो जाता है क्योंकि पायथन का कार्य नियमित अनियंत्रित शब्दकोश का उपयोग करते हुए कीवर्ड तर्कों को पास करता है"
PPS: उम्मीद है, भविष्य में, ऑर्डरडीडक्ट kwargs के ऑर्डर को भी संरक्षित करेगा (उदाहरण 1): http://bugs.python.org/issue16991