Gnarlodious <gnarlodi...@gmail.com> writes: > from plistlib import readPlist > dict=readPlist('/path/file.plist') > --> arbitrarily ordered dictionary compared to the XML file
Right. The items in a dict are unordered, and when serialised to a list they will appear in an arbitrary, unpredictable order. >>> foo = dict( ... [('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)]) >>> foo {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4} > from collections import OrderedDict > OrderedDict(readPlist('/path/file.plist')) > --> essentially does the same thing as the previous Yes, because you are initialising an OrderedDict instance from a dict. That accesses the dict items as an iterable, which of course is going to retrieve the items in an arbitrary, unpredictable order. >>> foo.items() dict_items([('a', 1), ('c', 3), ('b', 2), ('e', 5), ('d', 4)]) The OrderedDict then faithfully remembers the arbitrary ordering of the items. >>> from collections import OrderedDict >>> OrderedDict(foo.items()) OrderedDict([('a', 1), ('c', 3), ('b', 2), ('e', 5), ('d', 4)]) > readPlist seems to do the scrambling Nothing “does” the scrambling; the order is forgotten by the dict as soon as the items go in. > I "upgraded" to Py3 to have OrderedDict, so please don't say it is > impossible... What you'll need to do is insert the items into the OrderedDict instance in the desired order. You will, of course, need to define what that desired order is. >>> sorted(foo.items(), key=(lambda item: item[0])) [('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)] >>> OrderedDict(sorted(foo.items(), key=(lambda item: item[0]))) OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)]) -- \ “When we talk to God, we're praying. When God talks to us, | `\ we're schizophrenic.” —Jane Wagner, via Lily Tomlin, 1985 | _o__) | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list