dict diff
Jin Yi
razamatan_retral_net at nospam.com
Sat Nov 20 15:33:55 EST 2010
right. i moved to a 2-value tuple return value basically to illustrate exactly where each dict is providing a different value. it turns out to be much easier to grok than the 3-value one since it's all there and lines up correctly with the inputs...
On Sat, Nov 20, 2010 at 12:00:16PM +0000, Steven D'Aprano wrote:
> On Sat, 20 Nov 2010 01:11:53 -0500, Steve Holden wrote:
>
> > On 11/19/2010 8:58 PM, Jin Yi wrote:
> >> so i came up with a diff method to compare 2 dicts.
> [...]
> > A PEP *and* some explanation of why you would want such an obscure piece
> > of code built in to the dict object, yes.
>
> You've never wanted to see how two dicts differ, as well as the fact that
> they do? I frequently find myself wanting to see why two dicts that
> should be equal aren't, especially for testing and debugging.
>
> I use this function:
>
> def dict_diffs(a, b):
> """dict_diffs(adict, bdict) -> (amissing, bmissing, different)
>
> Returns sets (amissing, bmissing, different) such that:
>
> amissing = keys missing from adict compared to bdict
> bmissing = keys missing from bdict compared to adict
> different = keys in both adict and bdict but with different values
>
> >>> dict_diffs({1:0, 2:0, 3:0}, {1:1, 2:0, 4:0})
> (set([4]), set([3]), set([1]))
>
> """
> from collections import Mapping
> if not isinstance(a, Mapping) and isinstance(b, Mapping):
> raise TypeError('arguments must both be mappings')
> amissing, bmissing, different = set(), set(), set()
> for key, value in a.items():
> if key not in b:
> bmissing.add(key)
> elif value != b[key]:
> different.add(key)
> for key, value in b.items():
> if key not in a:
> amissing.add(key)
> return (amissing, bmissing, different)
>
>
> --
> Steven
> --
> http://mail.python.org/mailman/listinfo/python-list
--
I pops mah collah. (Busta Rhymes)
Jin Yi -- http://www.retral.net/razamatan
More information about the Python-list
mailing list