from typing import Dict
from typing import Union
from typing import Any
from typing import List


def hash_dict(
    item_dict: Dict[str, Union[Dict[str, Any], List[Any], str]]
) -> Dict[str, Any]:
    """
    Hash dictionary values.

    Parameters
    ----------
    item_dict : Dict[str, Union[Dict[str, Any], List[Any], str]]
        Input item can be a Dict of strings, lists or other
        dictionaries.

    Returns
    -------
    Dict[str, Any]
        Dictionary with hashed values.

    """
    out_dict = {}
    for key, val in item_dict.items():
        if isinstance(val, dict):
            hash_val = hash_dict(val)
        elif isinstance(val, list):
            hash_val = hash_list(val)  # type: ignore
        else:
            hash_val = hash_string(val)  # type: ignore
        out_dict[key] = hash_val
    return out_dict