old = {item['id']: item for item in list_old}
created = set(new.keys()) - set(old.keys())
deleted = set(old.keys()) - set(new.keys())
intersect = set(new.keys()).intersection(set(old.keys()))
diff = {id: dict(set(new[id].items()) - set(old[id].items())) for id in
    intersect}
diff.update({id: new[id] for id in created})
list_diff = [dict(data, **{'id': id}) for id, data in list(diff.items())]
Match set of dictionaries. Most elegant solution. Python