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