def create_information_dictionary_for_sites(hpo_dfs, selected_hpo_names,
                                            most_popular_race_cids):
    """
    Function is used to create a dictionary that contains the racial makeup of a selected
    number of sites (expressed as a percentage, from a source dataframe)
    
    Parameters
    ----------
    hpo_dfs (dictonary): has the following structure
        key: string representing an HPO ID
        value: dataframe that contains information about the different race concepts (IDs
               and names) and their relative spread within the site
    
    selected_hpo_names (list): contains strings that represent the different HPOs that will
        ultimately be translated to a dictionary
        

    most_popular_race_cids (list): list of the most popular concept IDs (across all sites)


    Returns
    -------
    racial_percentages (dictionary): has the following structure
        key: race concept ID
        value: list, each index represents one of the sites in the 'selected_hpo_names'
               parameter. the value represents the proportion of persons from the HPO
               who have the reported race concept ID
    """

    racial_percentages = {}

    # want to get the percentages for each of the race concept IDs
    for race_concept_id in most_popular_race_cids:
        race_percentage_list = []

        # want to look at the sites in parallel - access their dataframe
        for hpo in selected_hpo_names:
            df = hpo_dfs[hpo]
            temp = df.loc[df['race_concept_id'] == race_concept_id]

            if temp.empty:
                race_percentage_list.append(0)
            else:
                val = float(temp['percent_of_site_persons'])  # convert to float
                race_percentage_list.append(val)

        racial_percentages[race_concept_id] = race_percentage_list

    return racial_percentages