Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #3884
| Date | 2011-04-22 14:34 -0400 |
|---|---|
| Subject | dict comparison [was: suggestions, comments on an "is_subdict" test] |
| From | Zero Piraeus <schesis@gmail.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.759.1303497274.9059.python-list@python.org> (permalink) |
:
On 22 April 2011 13:30, Peter Otten <__peter__@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.
Back to comp.lang.python | Previous | Next | Find similar
dict comparison [was: suggestions, comments on an "is_subdict" test] Zero Piraeus <schesis@gmail.com> - 2011-04-22 14:34 -0400
csiph-web