Python-基于2个值合并字典列表

时间:2020-08-16 15:33:50

标签: python dictionary

我有一个像这样的字典列表:

[
  {
    'accountId': 952940,
    'objectType': 'Creative',
    'objectId': 1361295595
  },
  {
    'accountId': 7037,
    'objectType': 'Placement',
    'objectId': 2713583698
  },
  {
    'accountId': 7037,
    'objectType': 'Placement',
    'objectId': 271354409
  },
  {
    'accountId': 7037,
    'objectType': 'Ad',
    'objectId': 1234565698
  }
]

我想按accountId和objectType对它们进行分组,所以最终输出看起来像这样:

[
  {
    'accountId': 959740,
    'objectType': 'Creative',
    'objectId': 136139595
  },
  {
    'accountId': 7037,
    'objectType': 'Placement',
    'objectId': [275765698,279984409]
  },
  {
    'accountId': 7037,
    'objectType': 'Ad',
    'objectId': 1234565698
  }
]

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用以组术语为键的defaultdict

from collections import defaultdict

grouped = defaultdict(list)
for entry in my_list:
    grouped[(entry['accountId'], entry['objectType'])].append(entry['objectId'])

new_list = [{'accountId': k[0], 'objectType': k[1], 'objectId': v}
            for k, v in grouped.items()]

请注意,objectId即使在单个项目中,也始终会在结果中包含一个列表。

答案 1 :(得分:0)

如果使用熊猫是可以接受的;尝试这种方式:

df = df.groupby(['accountId', 'objectType']).agg(list).reset_index()
print(df.to_dict(orient='records'))

[{'accountId': 7037, 'objectType': 'Ad', 'objectId': [1234565698]}, {'accountId': 7037, 'objectType': 'Placement', 'objectId': [2713583698, 271354409]}, {'accountId': 952940, 'objectType': 'Creative', 'objectId': [1361295595]}]
相关问题