[Python-ideas] [Python-Dev] hello, new dict addition for new eve ?

Nathan Rice nathan.alexander.rice at gmail.com
Tue Jan 3 18:39:48 CET 2012


On Tue, Jan 3, 2012 at 12:10 PM, Robert Kern <robert.kern at gmail.com> wrote:
> On 1/3/12 4:59 PM, Nathan Rice wrote:
>>
>> This is slightly tangential, but I've always wondered... Why aren't
>> set operations implemented on dicts?  It is fairly natural to view a
>> dictionary as a set of (key, value) pairs.  Things like
>> subset/superset checking (with concomitant operator support) make
>> sense.  I have written stuff like set(dict1.items())<
>> set(dict2.items()) many times.
>
>
> The values are unrestricted Python objects. They do not have to be hashable
> or sortable. The set operations you describe would have to be require one or
> both (or else do something algorithmically horrendous).

I haven't had any problems with using set(somedict.items()).  I will
admit that I primarily do this in simple contexts.

This brings me to another curiosity... Why do mutable items not
implement hash using id()?

> Further, you cannot treat dicts as sets of (key, value) pairs because dicts
> have unique keys, not unique (key, value) pairs.

I'm confused.  Because keys are unique, (key, value) pairs are unique
as well.  I realize the values are not unique but the tuple is
guaranteed to be.

>> I don't even know what rich comparison operators on dictionaries do
>> now, it isn't intuitive at all.
>
>
> The rich comparison operators are only defined for == and !=. In Python 2.x,
> there is a legacy implementation of __cmp__ that does something more
> complicated. I recommend ignoring it.

Recommendation definitely noted :D

Nathan



More information about the Python-ideas mailing list