Как перебрать диктовку со списками и создать новый? - PullRequest
0 голосов
/ 17 октября 2019

Есть словарь:

dict_example = 
{'type_a': {'view_id': ['111', '222', '333'],
  'start_date': '2019-07-01',
  'end_date': '2019-09-01'},

 'type_b': {'view_id': ['111'],
  'start_date': '2019-07-01',
  'end_date': '2019-09-01'}}

Для каждого типа и для каждого view_id мне нужно добавить метрики и измерения и создать новый dict, включая их.

Для type_a у меня естьДобавить: метрики: ga: type_a_metric, размеры: ga: type_a_dimension Для type_b мне нужно добавить: метрики: ga: type_b_metric, размеры: ga: type_b_dimension

Они хранятся в данных кадров

metrics =

request_type metrics_name
type_a       ga:type_a_metric
type_b       ga:type_b_metric

dimensions =

request_type dimension_name
type_a       ga:type_a_dimension
type_b       ga:type_b_dimension

Итак, сначала я перебираю метрики и измерения


# stores values for the last type: type_b
for k in dict_example .keys():
    metrics_type = metrics.loc[(metrics['request_type'] == k)]
    metrics_list = metrics_type['metrics_name'].to_list()
    dimensions_type = dimensions.loc[(dimensions['request_type'] == k)]
    dimensions_list = dimensions_type['dimension_name'].to_list()

        # add additional info fot the later use
        # stores the last type: type_b 
    dimensions_js = [{
            'name': x,
        } for x in dimensions_list]
       # stores the last type
    metrics_js = [{
            'expressions': x,
        } for x in metrics_list] 


So far lists include: 
dimensions_js = [{'name': 'ga:type_b_dimension'}]
metrics_js  = [{'expressions': 'ga:type_b_metric'}]

Затем я перебираю view_ids:


 # stores the first type: type_a
 # view_id = ['111', '222', '333']
    for k, v in dict_example .items():
        view_id = dict_example[k]['view_id'] 

    # then I create a variable data and assign it for every view
    # the rest of params I get from dict_example
    # stores the first type

        for k, v in dict_example.items():
            for view in view_id:
                data =  {'view_id': view,
        'start_date': v['start_date'],
        'end_date': v['end_date'],
            'metrics': metrics_js,
             'dimensions': dimensions_js
            }
        # stores the first type: type_a data_finish
        # finnaly store everything in a dict 
                data_finish['view_id_' + view] = data

В результате получается data_finish:

{'view_id_111': {'view_id': '111',
  'start_date': '2019-07-01',
  'end_date': '2019-09-01',
  'metrics': [{'expressions': 'ga:type_b_metric'}],
  'dimensions': [{'name': 'ga:type_b_dimension'}]},
 'view_id_222': {'view_id': '222',
  'start_date': '2019-07-01',
  'end_date': '2019-09-01',
  'metrics': [{'expressions': 'ga:type_b_metric'}],
  'dimensions': [{'name': 'ga:type_b_dimension'}]},
 'view_id_111': {'view_id': '333',
  'start_date': '2019-07-01',
  'end_date': '2019-09-01',
  'metrics': [{'expressions': 'ga:type_b_metric'}],
  'dimensions': [{'name': 'ga:type_b_dimension'}]}}

Но чтоЯ хочу это:

{'view_id_111': {'view_id': '111',
  'start_date': '2019-07-01',
  'end_date': '2019-09-01',
  'metrics': [{'expressions': 'ga:type_a_metric'}],
  'dimensions': [{'name': 'ga:type_a_dimension'}]},
 'view_id_222': {'view_id': '222',
  'start_date': '2019-07-01',
  'end_date': '2019-09-01',
  'metrics': [{'expressions': 'ga:type_a_metric'}],
  'dimensions': [{'name': 'ga:type_a_dimension'}]},
 'view_id_333': {'view_id': '333',
  'start_date': '2019-07-01',
  'end_date': '2019-09-01',
  'metrics': [{'expressions': 'ga:type_a_metric'}],
  'dimensions': [{'name': 'ga:type_a_dimension'}]},

'view_id_111': {'view_id': '111',
  'start_date': '2019-07-01',
  'end_date': '2019-09-01',
  'metrics': [{'expressions': 'ga:type_b_metric'}],
  'dimensions': [{'name': 'ga:type_b_dimension'}]}

}
...