3 回答
TA贡献1827条经验 获得超9个赞
您可以使用itertools.groupby
from itertools import chain, groupby
data = sorted(d, key=lambda x: x['name'])
res = [{'name': k, 'values': list(chain.from_iterable(y['values'] for y in g))} for k, g in groupby(data, key=lambda x: x['name'])]
print(res)
输出:
[{'name': 'impressions',
'values': [{'value': 0, 'end_time': '2020-09-11T07:00:00+0000'},
{'value': 4, 'end_time': '2020-09-12T07:00:00+0000'}]},
{'name': 'reach',
'values': [{'value': 0, 'end_time': '2020-09-11T07:00:00+0000'},
{'value': 1, 'end_time': '2020-09-12T07:00:00+0000'},
{'value': 1, 'end_time': '2020-09-13T07:00:00+0000'},
{'value': 2, 'end_time': '2020-09-14T07:00:00+0000'}]}]
TA贡献1828条经验 获得超4个赞
d = list() # Your initial list (you don't have to copy this line but just assign your initial list to d
result_dict = dict()
for e in d:
if result_dict.get(e['name']):
result_dict[e['name']].extend(e['values'])
else:
result_dict[e['name']] = e['values']
使用此代码,您可以在 result_dict 中获取结果作为键值,其中键是名称,值是与该名称对应的值的列表。我认为这种结构更容易维护,并且在转换数据后您应该继续处理这种结构。
TA贡献1821条经验 获得超4个赞
您确实应该首先发布您的尝试,而不是要求别人这样做。然而:
new_data_dict = {}
for item in data:
if item['name'] not in new_data_dict:
new_data_dict[item['name']] = []
new_data_dict[item['name']] += item['values']
new_data_list = [{'name': name, 'values': values} for name, value in new_data_dict.items()]
添加回答
举报