Ordered dictionary?

Antoon Pardon apardon at forel.vub.ac.be
Fri Jan 23 04:16:10 EST 2004


Op 2004-01-22, Paul McGuire schreef <ptmcg at users.sourceforge.net>:
> "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

Well I too sometimes need the keys in a dictionary to be sorted and your
solutions wouldn't help. The problem is the following.

I have a number of key value pairs, like names and telephone numbers.
Just more subject to change.  Now I want the telephone numbers of everyone
whose name starts with "jan".

Or I just inserted a name and want to know who is alphabetically next.
Or I want to know who is first or last.

-- 
Antoon Pardon



More information about the Python-list mailing list