diff --git a/jsonpatch.py b/jsonpatch.py index d3fc26d..c6e9b64 100644 --- a/jsonpatch.py +++ b/jsonpatch.py @@ -859,19 +859,20 @@ def _item_replaced(self, path, key, item): }, pointer_cls=self.pointer_cls)) def _compare_dicts(self, path, src, dst): - src_keys = set(src.keys()) - dst_keys = set(dst.keys()) - added_keys = dst_keys - src_keys - removed_keys = src_keys - dst_keys - - for key in removed_keys: - self._item_removed(path, str(key), src[key]) - - for key in added_keys: - self._item_added(path, str(key), dst[key]) - - for key in src_keys & dst_keys: - self._compare_values(path, key, src[key], dst[key]) + # removed keys + for key in src: + if key not in dst: + self._item_removed(path, str(key), src[key]) + + # added keys + for key in dst: + if key not in src: + self._item_added(path, str(key), dst[key]) + + # shared keys + for key in src: + if key in dst: + self._compare_values(path, key, src[key], dst[key]) def _compare_lists(self, path, src, dst): len_src, len_dst = len(src), len(dst)