def zip_dicts(left, right, prefix=()):
    """
    Modified zip through two dictionaries.

    Iterate through all keys of left dictionary, returning:

      -  A nested path
      -  A value and parent for both dictionaries

    """
    for key, left_value in left.items():
        path = prefix + (key, )
        right_value = right.get(key)

        if isinstance(left_value, dict):
            yield from zip_dicts(left_value, right_value or {}, path)
        else:
            yield path, left, left_value, right, right_value
Modified zip through two dictionaries.

    Iterate through all keys of left dictionary, returning:

      -  A nested path
      -  A value and parent for both dictionaries