Ordered dictionary?

Mel Wilson mwilson at the-wire.com
Tue Jan 27 17:56:14 CET 2004


In article <99dce321.0401231546.5f73d721 at posting.google.com>,
dw-google.com at botanicus.net (David M. Wilson) wrote:
>"Paul McGuire" <ptmcg at users.sourceforge.net> wrote...
>
>> If you really need to access the dictionary in sorted key order, is this so
>> difficult?
>
>That was not the original poster's question. Order is semantic
>information which a dictionary does not record or represent in any
>way.

Wants order of insertion.  Best I can think of is



class OrderedDict (dict):
    "Retains order-of-insertion in the dictionary"
    def __setitem__ (self, key, value):
        dict.__setitem__ (self, key, (len (self), value,) )

    def __getitem__ (self, key):
        return dict.__getitem__ (self, key)[1]

    def ordered_items (self):
        i = [(v, k) for (k, v) in self.items()]
        i.sort()
        return [(k, v[1]) for (v, k) in i]

# end class OrderedDict

if __name__ == '__main__':
    D = OrderedDict()
    D['oranges'] = 41
    D['lemons'] = 22
    D['limes'] = 63

    print D
    print D.ordered_items()



   Possibly other refinenemts:  __init__ that inserts from a
sequence of 2-tuples, keeping a sequence number as a class
attribute instead of using len, etc.

        Regards.        Mel.



More information about the Python-list mailing list