【问题标题】:How to build a JSON object iterating over dict?如何构建一个遍历dict的JSON对象?
【发布时间】:2019-10-08 13:21:50
【问题描述】:

有一个函数,它根据请求类型(在此 dict 中指示)迭代带有 GA API 参数的 dict,获取其他参数,结果我们有一个新的 dict。

表是从 SQL 表中获取的,并且是 pandas df 格式

指标表的指标 尺寸表的尺寸


def ga_config(dimensions, metrics, ga_config_1):

    data_finish = {} # finish dict with all parameters

    for k in ga_config_1.keys(): # check the type of the request (ga_standard or ga_users)
        metrics_type = metrics.loc[(metrics['request_type'] == k)] # get the rows for this type of request
        metrics_list = metrics_type['metric_name'].to_list()  # convert them to a list
        dimensions_type = dimensions.loc[(dimensions['request_type'] == k)]
        dimensions_list = dimensions_type['dimension_name'].to_list()

        dimensions_js = [{
            'name': x,
        } for x in dimensions_list]   # add 'name' in order to make a request later

        metrics_js = [{
            'expressions': x,
        } for x in metrics_list] # add 'expressions' in order to make a request later

        """
        Iterates over a dict with the rest of the parameters like view_id and dates

        """
        for k, v in ga_config_1.items():
            data =  {'view_id': v['view_id'],
        'start_date': v['start_date'],
        'end_date': v['end_date'],
            'metrics': metrics_js,
             'dimensions': dimensions_js
            }
        data_finish['view_id_' + v['view_id']] = data


        return data_finish


# ga_config_1  parameters: 2 types of request, but can be more: ga_standard and ga_users

ga_config_1 = {'ga_standard' : {'view_id': '115126931',
                           'start_date': '2019-01-01',
                           'end_date': '2019-01-01'},


              'ga_standard' : {'view_id': '1151269318',
                           'start_date': '2019-01-01',
                           'end_date': '2019-01-01'},
              'ga_users' : {'view_id': '1151269399',
                           'start_date': '2019-01-01',
                           'end_date': '2019-01-01'}}

如果输入 ga_standard: 尺寸:ga:年 指标:ga:sessions, ga:bounces

如果输入 ga:users: 维度:ga:userType 指标:ga:users

但结果只是ga_config_1中的最后一个参数

data_finish = {
'view_id_1151269399': {'view_id': '1151269399',
  'start_date': '2019-01-01',
  'end_date': '2019-01-01',
  'metrics': [{'expressions': 'ga:users'}],
  'dimensions': [{'name': 'ga:userType'}]}}

但所需的输出应该包含所有这些

data_finish ={

{'view_id_115126931': {'view_id': '115126931',
  'start_date': '2019-01-01',
  'end_date': '2019-01-01',
  'metrics': [{'expressions': 'ga:users'}, {'expressions': 'ga:sessions'}, {'expressions': 'ga:bounces'}],
  'dimensions': [{'name': 'ga:year'}]}},

{'view_id_1151269318': {'view_id': '1151269318',
  'start_date': '2019-01-01',
  'end_date': '2019-01-01',
  'metrics': [{'expressions': 'ga:users'}, {'expressions': 'ga:sessions'}, {'expressions': 'ga:bounces'}],
  'dimensions': [{'name': 'ga:year'}]}},

{'view_id_1151269399': {'view_id': '1151269399',
  'start_date': '2019-01-01',
  'end_date': '2019-01-01',
  'metrics': [{'expressions': 'ga:users'}],
  'dimensions': [{'name': 'ga:userType'}]}
}


我知道有一些愚蠢的错误,但无法理解

【问题讨论】:

    标签: python json list dictionary


    【解决方案1】:

    data_finish 键的赋值应该在内部for 循环内,而return 语句应该在外部for 循环之外:

    def ga_config(dimensions, metrics, ga_config_1):
        data_finish = {}  # finish dict with all parameters
    
        for k in ga_config_1.keys():  # check the type of the request (ga_standard or ga_users)
            metrics_type = metrics.loc[(metrics['request_type'] == k)]  # get the rows for this type of request
            metrics_list = metrics_type['metric_name'].to_list()  # convert them to a list
            dimensions_type = dimensions.loc[(dimensions['request_type'] == k)]
            dimensions_list = dimensions_type['dimension_name'].to_list()
    
            dimensions_js = [{
                'name': x,
            } for x in dimensions_list]  # add 'name' in order to make a request later
    
            metrics_js = [{
                'expressions': x,
            } for x in metrics_list]  # add 'expressions' in order to make a request later
    
            """
            Iterates over a dict with the rest of the parameters like view_id and dates
    
            """
            for k, v in ga_config_1.items():
                data = {'view_id': v['view_id'],
                        'start_date': v['start_date'],
                        'end_date': v['end_date'],
                        'metrics': metrics_js,
                        'dimensions': dimensions_js
                        }
                data_finish['view_id_' + v['view_id']] = data
    
        return data_finish
    

    【讨论】:

    • 您好,我试过了,但它返回 ga_config_1 的 2 和 3 元素以及第三个 (ga_users) 的维度和指标((
    猜你喜欢
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2015-01-11
    相关资源
    最近更新 更多