Dictionary .keys() and .values() should return a set [with Python 3000 in mind]

Nick Vatamaniuc vatamane at gmail.com
Sun Jul 2 01:08:05 EDT 2006


You are correct I should have thought of that. I still think the keys()
method should return a set() though.

Robert Kern wrote:
> vatamane at gmail.com wrote:
> > The same thing goes for the values(). Here most people will argue that
> > values are not necessarily unique, so a list is more appropriate, but
> > in fact the values are unique it is just that more than one key could
> > map to the same value.  What is 'seen' in dictionary is the mapping
> > rule.  Also the values are not ordered and should not be indexable --
> > they should be a set. Just as  the keys(), one ordered list of values
> > from a dictionary on one machine will not necessarily be equal to
> > another list of values an on another machine, while in fact, they
> > should be.
>
> This part is pretty much a non-starter. Not all Python objects are hashable.
>
> In [1]: d = {}
>
> In [2]: for i in range(1, 10):
>     ...:     d[i] = range(i)
>     ...:
>     ...:
>
> In [3]: set(d.values())
> ---------------------------------------------------------------------------
> exceptions.TypeError                                 Traceback (most recent call
> last)
>
> /Users/kern/<ipython console>
>
> TypeError: list objects are unhashable
>
>
> Also, I may need keys to map to different objects that happen to be equal.
>
> --
> Robert Kern
>
> "I have come to believe that the whole world is an enigma, a harmless enigma
>   that is made terrible by our own mad attempt to interpret it as though it had
>   an underlying truth."
>    -- Umberto Eco




More information about the Python-list mailing list