在Python中按参数合并两个字典列表

2024-10-04 05:25:15 发布

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

我有两个字典列表,上面有印象数据和点击数据。例如:

[{'offerId': '1650', 'position': '15', 'clicksCount': 21}, {'offerId': '2323', 'position': '12', 'clicksCount': 14}, {'offerId': '2323', 'position': '14', 'clicksCount': 8}, {'offerId': '1621', 'position': '10', 'clicksCount': 7}]...

[{'offerId': '3207', 'position': '9', 'impressionsCount': 866}, {'offerId': '1650', 'position': '6', 'impressionsCount': 896}, {'offerId': '3207', 'position': '1', 'impressionsCount': 909}, {'offerId': '2323', 'position': '12'}]...

我需要把它合并在一起,通过offerId和position得到每个offer position的结果(点击和印象)

做这样的事 enter image description here

我尝试了此代码,但返回了错误的结果:

d = defaultdict(dict)
for l in (clicks_aggregated_data, impressions_aggregated_data):
    for elem in l:
        d[elem['offerId']].update(elem)
        d[elem['position']].update(elem)
combined_data = list(d.values())


for model, group in groupby(combined_data, key=lambda x:x['offerId']):
    print(list(group))

有人能帮我达到一张桌子上的效果吗(截图)


Tags: 数据infordatagrouppositionupdatelist
2条回答

我希望这就是你想做的。用这两个dict创建pandas dataframe,然后求clicksimpressions的和。见下面的模型。让我知道它是否有效

import pandas as pd

d1=[{'offerId': '1650', 'position': '15', 'clicksCount': 21}, 
 {'offerId': '2323', 'position': '12', 'clicksCount': 14}, 
 {'offerId': '2323', 'position': '14', 'clicksCount': 8}, 
 {'offerId': '1621', 'position': '10', 'clicksCount': 7}]

d2=[{'offerId': '3207', 'position': '9', 'impressionsCount': 866},
 {'offerId': '1650', 'position': '6', 'impressionsCount': 896}, 
 {'offerId': '3207', 'position': '1', 'impressionsCount': 909}, 
 {'offerId': '2323', 'position': '12'}]

combdf=df1.append([pd.DataFrame(d1), pd.DataFrame(d2)],sort=False)

combdf.groupby(['offerId', 'position']).sum()[["clicksCount", "impressionsCount"]].reset_index()

结果如下:

offerId position    clicksCount impressionsCount
0   1621    10  14.0    0.0
1   1650    15  42.0    0.0
2   1650    6   0.0 896.0
3   2323    12  28.0    0.0
4   2323    14  16.0    0.0
5   3207    1   0.0 909.0
6   3207    9   0.0 866.0

您可以尝试从impressions_aggregated_data创建查找dict,然后进行合并

例如:

impressions_aggregated_data_lookup = {"{}_{}".format(i["offerId"], i["position"]) : i["impressionsCount"] for i in impressions_aggregated_data}

for i in clicks_aggregated_data:
    if "{}_{}".format(i["offerId"], i["position"]) in impressions_aggregated_data_lookup:
        i.update({"impressionsCount": impressions_aggregated_data_lookup["{}_{}".format(i["offerId"], i["position"])]})

pprint(clicks_aggregated_data)

相关问题 更多 >