def get_by_string(source_dict, search_string, default_if_not_found=None):
    """
    Search a dictionary using keys provided by the search string.
    The search string is made up of keywords separated by a '.'
    Example: 'fee.fie.foe.fum'
    :param source_dict: the dictionary to search
    :param search_string: search string with keyword separated by '.'
    :param default_if_not_found: Return value if search is un-successful
    :return value, dictionary or default_if_not_found
    """
    if not source_dict or not search_string:
        return default_if_not_found

    dict_obj = source_dict

    for search_key in search_string.split("."):
        try:
            dict_obj = next(val for key, val in dict_obj.iteritems() if key == search_key)
        except StopIteration:
            return default_if_not_found
    return dict_obj