[Python-3000] ordered dict for p3k collections?
Charles D Hixson
charleshixsn at earthlink.net
Wed Sep 26 21:39:49 CEST 2007
skip at pobox.com wrote:
> Mark> With sorteddict you pay O(log N) for accessing, but you pay
> Mark> nothing for sorting.
>
> Pay me now or pay me later, but maintaining a sorted sequence will always
> cost something.
>
> Skip
>
Very frequently, however, I want frequent sorted access to a container.
I.e. I will want something like "what's the next key bigger than nnn"
(I said nnn because it often isn't a string). In such cases a B+Tree or
B*Tree is a much better answer than a hash table. I'll grant that for
the most common cases hash tables are superior...but not, by any means,
for all cases.
There have been cases where I have maintained both a list and a dict for
the same data. (Well, the list was an index into the dict, but you get
the idea.) The dict was for fast access when I knew the key, and the
list was for binary search when I knew things *about* the key.
An important note here is that the key to the dict/list was generally
NOT a string in these situations. If strings suffice, then I've
generally found a hash table to work well enough, and frequently been
superior.
OTOH, if you don't need continual access while you are building the
list, then I agree with you. The problem is that each time you sort a
hash table you must pay for an entire sort, while adding a key or two to
a B+Tree is relatively cheap.
More information about the Python-3000
mailing list