首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Dict默认使用Dict

使用Dict默认使用Dict
EN

Stack Overflow用户
提问于 2015-11-20 19:49:01
回答 1查看 3K关注 0票数 0

我有一本这样的字典

代码语言:javascript
复制
a = [{'CohortList': [{'DriverValue': 0.08559936}, {'DriverValue': 0.08184596527051588}], 
      '_id': {'DriverName': 'Yield', 'MonthsOnBooks': 50, 'SegmentName': 'LTV110-Super Prime'}},
     {'CohortList': [{'DriverValue': 2406.04329}, {'DriverValue': 2336.0058100690103}, ], 
      '_id': {'DriverName': 'ADB', 'MonthsOnBooks': 15, 'SegmentName': 'LTV110-Super Prime'}},
     {'CohortList': [{'DriverValue': 2406.04329}, {'DriverValue': 2336.0058100690103}, ], 
      '_id': {'DriverName': 'ADB', 'MonthsOnBooks': 16, 'SegmentName': 'LTV110-Prime'}}]

我想构建一个字典列表,其中的值为上述字典集中的列表,如下所示

代码语言:javascript
复制
    {
    "LTV110-Prime": [
        {
            "ADB": [
                {
                    "16": 1500
                }
            ]
        },
        {
            "Yield": []
        }
    ],
    "LTV110-Super Prime": [
        {
            "ADB": [
                {
                    "15": 1500
                }
            ]
        },
        {
            "Yield": [
                {
                    "50": 0.09
                }
            ]
        }
    ]
}

本质上,我希望对ADB进行分组,并使用它们的值为每个细分市场提供收益。

这就是我到目前为止为实现这个目标所做的一切。ADB的值是CohortList列表中DriverValue的平均值。我已经使用statistics.mean找出了映射值的平均值。

代码语言:javascript
复制
sg_wrap = defaultdict(dict)
for p in pp_data:
    mapped = map(lambda d: d.get('DriverValue', 0), p['CohortList'])
    dic = {p['_id']['MonthsOnBooks']: statistics.mean(mapped)}

    print(p)
print(sg_wrap)

我无法将驱动程序附加到内部字典中。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2015-11-20 20:17:02

由于您将所有内容包装到列表中,因此您不需要defaultdict(dcit),而需要defaultdict(list)

下面的方法似乎是可行的:

代码语言:javascript
复制
result = defaultdict(list)
for entry in a:
    id_ = entry["_id"]
    name, months, segment = id_["DriverName"], id_["MonthsOnBooks"], id_["SegmentName"]
    values = [x["DriverValue"] for x in entry["CohortList"]]
    d = {name: [{months: statistics.mean(values)}]}
    result[segment].append(d)

结果是

代码语言:javascript
复制
{'LTV110-Prime': [{'ADB': [{16: 2371.0245500345054}]}],
 'LTV110-Super Prime': [{'Yield': [{50: 0.08372266263525793}]},
                        {'ADB': [{15: 2371.0245500345054}]}]}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33826024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档