Ordered dictionary?

Paul McGuire ptmcg at users.sourceforge.net
Thu Jan 22 22:19:07 CET 2004


"Leif K-Brooks" <eurleif at ecritters.biz> wrote in message
news:leWPb.231$af7.162835 at newshog.newsread.com...
> I need to associate a string (key) with an integer (value). A dictionary
> would do the job, except for the fact that it must be ordered. I also
> need to look up the value for a specific key easily, so a list of tuples
> wouldn't work.
>
If you really need to access the dictionary in sorted key order, is this so
difficult?

    dKeys = d.keys()
    dKeys.sort()
    for k in dKeys:
        # do stuff with k and d[k], such as:
        print k, "=", d[k]

Or if you are worried about updates to d between the time of key retrieval
and time of traversal (for instance, if a separate thread were to delete one
of the keyed entries), take a snapshot as a list:

    dItems = d.items()   # from here on, you are insulated from changes to
dictionary 'd'
    dItems.sort()       # implicitly sorts by key
    dItems.sort( lambda a,b: a[1]-b[1] )  # sorts by value, if you so prefer
    for k,v in dItems:
        # do stuff with k and v, such as:
        print k, "=", v         # <-- added benefit here of not re-accessing
the list by key

-- Paul





More information about the Python-list mailing list