【问题标题】:Match key value of multiple dictionaries inside list Python匹配列表Python中多个字典的键值
【发布时间】:2021-11-17 01:19:17
【问题描述】:

我有一个包含多个字典的列表。这些字典中的每一个都有一个 ID。我需要找出哪些字典具有匹配的 ID 值。然后我可以创建这两个字典的平均值的新字典。

例子:

[
{'id': 123, 'conversions': 1.4227642276422763, 'cpc': 2.2357723577235773, 'cpm': 4.471544715447155, 'reach': 90.65040650406505}, 
{'id': 123, 'conversions': 1.4056224899598393, 'cpc': 2.208835341365462, 'cpm': 5.622489959839357, 'reach': 89.5582329317269},
{'id': 1234, 'conversions': 1.4056224899598393, 'cpc': 2.208835341365462, 'cpm': 5.622489959839357, 'reach': 89.5582329317269},
]

所以在本例中,id = 123 出现在两个字典中。所以我想创建一个具有这两个字典平均值的新字典,如下所示:

{'id': 123, 'conversions': 1.414166666, 'cpc': 2.2225462, 'cpm': 5.622489959839357, 'reach': 89.5582329317269}

请注意,上述示例中的平均值并不完全正确。

我的方法是,我需要识别具有相似 ID 的字典,然后将它们分别存储在一个列表中。然后我可以使用以下方法来创建它们的平均值。

out = {k: mean(d[k] for d in lst) for k in lst[0]}
print(out)

我的问题是我无法识别它们并将它们存储在列表中。

谢谢

【问题讨论】:

    标签: python list dictionary key key-value


    【解决方案1】:

    通过将字典按id 分组,将它们存储在单独的列表中:

    from collections import defaultdict
    
    data = [
        {'id': 123, 'conversions': 1.4227642276422763, 'cpc': 2.2357723577235773, 'cpm': 4.471544715447155, 'reach': 90.65040650406505}, 
        {'id': 123, 'conversions': 1.4056224899598393, 'cpc': 2.208835341365462, 'cpm': 5.622489959839357, 'reach': 89.5582329317269},
        {'id': 1234, 'conversions': 1.4056224899598393, 'cpc': 2.208835341365462, 'cpm': 5.622489959839357, 'reach': 89.5582329317269},
    ]
    
    same_ids = defaultdict(list)
    for item in data:
        same_ids[item["id"]].append(item)
    
    print(same_ids)
    

    输出

    {
        "123": [
            {
                "id": 123,
                "conversions": 1.4227642276422763,
                "cpc": 2.2357723577235773,
                "cpm": 4.471544715447155,
                "reach": 90.65040650406505
            },
            {
                "id": 123,
                "conversions": 1.4056224899598393,
                "cpc": 2.208835341365462,
                "cpm": 5.622489959839357,
                "reach": 89.5582329317269
            }
        ],
        "1234": [
            {
                "id": 1234,
                "conversions": 1.4056224899598393,
                "cpc": 2.208835341365462,
                "cpm": 5.622489959839357,
                "reach": 89.5582329317269
            }
        ]
    }
    

    现在它们已按 ID 分组,我们可以使用您的目标计算来计算每组的平均值。

    from statistics import mean
    
    keys_to_average = set(data[0].keys())
    # keys_to_average.discard("id")  # To remove id from the result
    
    for key, lst in same_ids.items():
        out = {k: mean(d[k] for d in lst) for k in keys_to_average}
        print(key, out)
    

    输出

    123 {'cpc': 2.2223038495445193, 'conversions': 1.4141933588010578, 'id': 123, 'reach': 90.10431971789598, 'cpm': 5.047017337643256}
    1234 {'cpc': 2.208835341365462, 'conversions': 1.4056224899598393, 'id': 1234, 'reach': 89.5582329317269, 'cpm': 5.622489959839357}
    

    【讨论】:

    • 谢谢尼尔!!这正是我想要的。干杯:)
    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 2021-01-10
    • 2020-03-31
    • 2017-05-01
    • 2018-04-29
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多