dict comparison [was: suggestions, comments on an "is_subdict" test]

Zero Piraeus schesis at gmail.com
Fri Apr 22 20:34:31 CEST 2011


:

On 22 April 2011 13:30, Peter Otten <__peter__ at web.de> wrote:
>>>> def is_subdict(test_dct, base_dct):
> ...     return test_dct <= base_dct and all(test_dct[k] == base_dct[k] for
> ... k in test_dct)
> ...
>>>> is_subdict({1:0}, {2:0})
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
>  File "<stdin>", line 3, in is_subdict
>  File "<stdin>", line 3, in <genexpr>
> KeyError: 1
>
> I think you have to convert to sets before performing the <= comparison to
> get a proper subset test.

Huh. I thought I remembered that dict comparison worked like set
comparison (and my admittedly minimal testing seemed to confirm that).
Turns out it's actually "consistent, but not otherwise defined" beyond
equality.

  http://docs.python.org/reference/expressions.html#id15

I maintain that the behaviour I expected makes more sense ;-) I wonder
whether making it work the way I want it to (dammit) would have been
as prohibitively expensive as the lexicographical comparison mentioned
in the footnote referenced in the above link?

 -[]z.



More information about the Python-list mailing list