def extract_data(raw_data, data_list, price_dataset, region):
    """
    Extract data on data_list from raw_data.

    Return data will be a dictionary, including three key-value pairs:
    (1) 'workdays'
        a DataController, the workdays data of the trading region.
    (2) 'price'
        a Dataset, the price dataset of the trading region.
    (3) 'others'
        a dict of Dataset, other data that users specify in data_list.
    """
    return {
        'workdays' : raw_data['workdays'][region],
        'price' : raw_data[region][price_dataset],
        'others' : {
            name : raw_data[region][name]
            for name in data_list if name in raw_data[region]}}