def diff_sets(desired, current):
    """
    Diff two state dictionaries by key

    :param desired: the desired state
    :param current: the current state
    :type desired: dict
    :type current: dict
    :return: returns a tuple that contains lists of added, removed and \
        changed elements from the desired dict
    :rtype: (list, list, list)
    """
    added = [desired[item] for item in desired if item not in current]
    removed = [current[item] for item in current if item not in desired]

    changed = []
    common = [(desired[item], current[item])
              for item in current if item in desired]
    for item in common:
        if not item[0] == item[1]:
            # Append the desired item set to changed zones list
            changed.append(item)

    return added, removed, changed