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條經驗 獲得超5個贊
您確實應該首先發布您的嘗試,而不是要求別人這樣做。然而:
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()]
添加回答
舉報