Proposed implementation for an Ordered Dictionary

Colin J. Williams cjw at ncf.ca
Sat Feb 28 19:21:09 EST 2009


Steven D'Aprano wrote:
> Colin J. Williams wrote:
> 
>> Sometimes, it's useful to be able to
>> obtain the data in the sorted sequence.
>>
>> You might consider adding functionality
>> like:
>>
>> def seqItems(self):
>> '''To return the items, sorted
>> by key. '''
>> return [self[k] for k in
>> self.seqKeys()]
> 
> Amazingly, the Python time-machine provides such functionality! Using just a
> handful of pre-existing pieces, you can do this:
> 
> sorted(mydict.items())
> sorted(mydict.keys())
> [mydict[x] for x in sorted(mydict.keys)]
> 
> and any other sequence you might need. That's the beauty of a general
> purpose programming language. You don't need everything to be a built-in
> *wink*
> 
> 
Thanks, you are right, you have a neat 
way of handling the first two, they
work with an instance of Raymond 
Hettinger's. OrderedDict.

The third suggestion has a couple of 
problems, which are fixed below.

if __name__ == '__main__':
     d= 
OrderedDict.fromkeys('abracadabra', 
value= 'zzz')
     print(d)
     print(d.seqKeys())
     print(d.seqItems())
     print(d.seqValues())
     # Steven D'Aprano's alternative
     mydict= d.copy()
     print sorted(mydict.items())
     print sorted(mydict.keys())
     # print [mydict[x] for x in 
sorted(mydict.keys)] Instance object is 
not iterable
     print(sorted(iter([(x[1], x[0]) for 
x in mydict.iteritems()]))) # This works

Colin W.



More information about the Python-list mailing list