字典python列表中的分组数据

2024-09-30 20:23:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份这样的字典清单

data = [
    {"_id": {"cohort_name": "09-01-2010", "segment_name": "LTV90-Prime", "driver_name": "ADB"}, "cohort_data": [
        {"calculated": [],
         "original": [{"1": 225.2699758337715}, {"2": 106.05173118059133}, {"3": 547.2908664469512},
                      {"4": 573.1083659247656}]}]},
    {"_id": {"cohort_name": "11-01-2010", "segment_name": "LTV90-Prime", "driver_name": "Unit Loss Rate"},
     "cohort_data": [{"calculated": [], "original": [{"1": 0.002687180620372531}, {"2": 0.001468127113897437}]}]},
    {"_id": {"cohort_name": "11-01-2010", "segment_name": "LTV90-Prime", "driver_name": "Unit Loss Rate"},
     "cohort_data": [{"calculated": [], "original": [{"10": 0.002687180620372531}, {"1": 0.002687180620372531},
                                                     {"2": 0.001468127113897437}]}]}
]

我正在尝试根据驱动程序名称和段名称对数据进行分组,并将所有队列名称和队列数据推送到内部字典中。你知道吗

预期输出如下

[{'driver_name': 'Unit Loss Rate',
      'segment_name': 'LTV90-Prime',
      'cohort_data': {
          '5-01-2010': [{'1': 0.002687180620372531}, {'2': 0.001468127113897437}, {'10': 0.002687180620372531}],
          '11-01-2010': [{'1': 0.002687180620372531}, {'2': 0.001468127113897437}]
      }},
     {'driver_name': 'ADB',
      'segment_name': 'LTV90-Prime',
      'cohort_data': {
          "09-01-2010": [{'1': 225.2699758337715}, {'2': 106.05173118059133}, {'3': 547.2908664469512},
                         {'4': 573.1083659247656}]
      }}
     ]

这就是我到目前为止所做的。我被困在推队列的名称和队列的数据在内部字典。你知道吗

def get_data_list(d):
    final_data = None
    for i in d:
        calculated = i['calculated']
        original = i['original']
        if original:
            final_data = original
        elif calculated:
            final_data = calculated

    return final_data


dd = defaultdict(dict)
for i in data:

    df = {}
    id_ = i['_id']
    cohort_name_final, segment_name_final, driver_name_final = id_['cohort_name'], \
                                                               id_['segment_name'], \
                                                               id_['driver_name']

    cohort_data_final = i['cohort_data']

    if segment_name_final not in df and segment_name_final not in df:
        df['segment_name'] = segment_name_final
        df['driver_name'] = driver_name_final
        df['cohort_data'] = get_data_list(cohort_data_final)
    elif segment_name_final in df and segment_name_final in df:
        df['cohort_data'].append(get_data_list(cohort_data_final))
        # df['cohort_data'].append({cohort_name_final: get_data_list(cohort_data_final)})

我使用的是python3.4.3。这里显示的数据是从MongoDB数据库查询的原始数据集的子集。你知道吗

请帮忙。你知道吗


Tags: 数据namein名称iddfdatadriver