Prev: Python/HTML integration: phileas v0.3 released
Next: scanning under windows WIA with custom settings (dpi / etc )
From: Joshua Bronson on 19 Nov 2009 18:24 I couldn't find a library providing a bijective map data structure (allowing for constant-time lookups by value) in the few minutes I looked, so I took a few more minutes to code one up: http://bitbucket.org/jab/toys/src/tip/bijection.py Is this at all worth releasing? Comments and suggestions welcome. Josh
From: Steven D'Aprano on 19 Nov 2009 19:05 On Thu, 19 Nov 2009 15:24:46 -0800, Joshua Bronson wrote: > I couldn't find a library providing a bijective map data structure > (allowing for constant-time lookups by value) in the few minutes I > looked, so I took a few more minutes to code one up: > http://bitbucket.org/jab/toys/src/tip/bijection.py > > Is this at all worth releasing? You just did :) > Comments and suggestions welcome. If I want a mapping a <-> b, I generally just create a dict {a:b, b:a}. What is the advantages or disadvantages of your code over the simplicity of the dict approach? (That is, sell us on the features of your approach.) -- Steven
From: Joshua Bronson on 19 Nov 2009 19:39 On Nov 19, 7:05 pm, Steven D'Aprano <st...(a)REMOVE-THIS- cybersource.com.au> wrote: > If I want a mapping a <-> b, I generally just create a dict {a:b, b:a}. > What is the advantages or disadvantages of your code over the simplicity > of the dict approach? Well for one, you don't have to manually update the mapping from b -> a if ever the mapping from a -> b changes. With your method you have to write something like "d[a] = c; d[c] = a; del d[b]" instead of just "d[a] = c", "del d[d.pop(a)]" instead of just "del d[a]", etc. More significantly, your approach doesn't actually model a bijection since there's no distinction between keys (the domain) and values (the range). In other words, you lose information about which way is the forward mapping and which is the inverse mapping. Worse, d.keys() and d.values() would each give you the combination of your keys and values, neither of which would be right, and d.items() would also return twice as many elements as you expect with no way to distinguish which side of the mapping a given pair comes from.
From: Carl Banks on 19 Nov 2009 21:17 On Nov 19, 3:24 pm, Joshua Bronson <jabron...(a)gmail.com> wrote: > I couldn't find a library providing a bijective map data structure > (allowing for constant-time lookups by value) in the few minutes I > looked, so I took a few more minutes to code one up:http://bitbucket.org/jab/toys/src/tip/bijection.py > > Is this at all worth releasing? Comments and suggestions welcome. Apart from the GPL, it seems perfectly fine to release, and looks like an interesting strategy. I've wanted one of those once in a while, never enough to bother looking for one or writing one myself. But you should absolutely not inherit from dict if you're overriding all it's methods. It's useless and wasteful to do that, perhaps dangerous. You end up using bytes for a small hash table that's never used. Plus Python 3 has a notion of Abstract Base Classes: it will allow customization of isinstance to advertise that your class implements MutableMapping, which is the right way to do it. Carl Banks
From: Ben Finney on 19 Nov 2009 21:36
Carl Banks <pavlovevidence(a)gmail.com> writes: > On Nov 19, 3:24 pm, Joshua Bronson <jabron...(a)gmail.com> wrote: > > I couldn't find a library providing a bijective map data structure > > (allowing for constant-time lookups by value) in the few minutes I > > looked, so I took a few more minutes to code one > > up:http://bitbucket.org/jab/toys/src/tip/bijection.py > > > > Is this at all worth releasing? Comments and suggestions welcome. > > Apart from the GPL, it seems perfectly fine to release, and looks like > an interesting strategy. I've wanted one of those once in a while, > never enough to bother looking for one or writing one myself. I would think GPL is an excellent choice for such a library then, if the author's intention is to encourage more software to be free software so that it can incorporate a unique library like this. -- \ “The fact that I have no remedy for all the sorrows of the | `\ world is no reason for my accepting yours. It simply supports | _o__) the strong probability that yours is a fake.” —Henry L. Mencken | Ben Finney |