Использование itertools.groupby
Пример:
from itertools import groupby
data = [{'location': 'eastus', 'sku': 'S', 'term': 'P1', 'scope': '1'},
{'location': 'india', 'sku': 'a', 'term': 'P1', 'scope': '2'},
{'location': 'eastus', 'sku': 'S', 'term': 'P3', 'scope': '3'},
{'location': 'india', 'sku': 'f', 'term': 'P1', 'scope': '4'},
{'location': 'japan', 'sku': 'a', 'term': 'P1', 'scope': '5'},
{'location': 'india', 'sku': 'a', 'term': 'P3', 'scope': '6'}
]
result = []
for k, v in groupby(sorted(data, key=lambda x: (x["location"], x["sku"])), lambda x: (x["location"], x["sku"])):
temp = dict(zip(('location', 'sku'), k))
sub_value = list(v)
if len(sub_value) == 1:
temp.update(sub_value[0])
else:
temp.update({'new_key': sub_value})
result.append(temp)
print(result)
Выход:
[{'location': 'eastus',
'new_key': [{'location': 'eastus', 'scope': '1', 'sku': 'S', 'term': 'P1'},
{'location': 'eastus', 'scope': '3', 'sku': 'S', 'term': 'P3'}],
'sku': 'S'},
{'location': 'india',
'new_key': [{'location': 'india', 'scope': '2', 'sku': 'a', 'term': 'P1'},
{'location': 'india', 'scope': '6', 'sku': 'a', 'term': 'P3'}],
'sku': 'a'},
{'location': 'india', 'scope': '4', 'sku': 'f', 'term': 'P1'},
{'location': 'japan', 'scope': '5', 'sku': 'a', 'term': 'P1'}]