Вот универсальное решение. Функция:
def group_dict_by_key(list_of_dicts, key):
res = {}
for item in list_of_dicts:
if item[key] not in res:
res[item[key]] = {key: item[key]}
temp = res[item[key]]
for k, v in item.items():
if k == key:
continue
elif k in temp:
temp[k] += (v,)
else:
temp[k] = (v,)
return list(res.values())
Входные данные:
d = [{'time': 1554283273.0824468, 'quaternion': [0.17855453309035293, 0.005453680566358193, -0.9834562739434834, -0.0300381977216707], 'id': 13762},
{'time': 1554283273.1220775, 'quaternion': [-0.9705062538096711, -0.029642658768302424, -0.23913505674039495, -0.007304021853201095], 'id': 13762},
{'time': 1554283273.1620576, 'quaternion': [0.836337807006856, 0.02554468467443435, -0.5473637151080412, -0.016718404199258217], 'id': 13762},
{'time': 1554283273.0824468, 'quaternion': [0.17855453309035293, 0.005453680566358193, -0.9834562739434834, -0.0300381977216707], 'id': 13763},
{'time': 1554283273.1220775, 'quaternion': [-0.9705062538096711, -0.029642658768302424, -0.23913505674039495, -0.007304021853201095], 'id': 13763},
{'time': 1554283273.1620576, 'quaternion': [0.836337807006856, 0.02554468467443435, -0.5473637151080412, -0.016718404199258217], 'id': 13763}]
Usage:
final = group_dict_by_key(d, 'id')
Выход:
[
{
'id': 13762,
'time': (1554283273.0824468, 1554283273.1220775, 1554283273.1620576),
'quaternion': (
[0.17855453309035293, 0.005453680566358193, -0.9834562739434834, -0.0300381977216707],
[-0.9705062538096711, -0.029642658768302424, -0.23913505674039495, -0.007304021853201095],
[0.836337807006856, 0.02554468467443435, -0.5473637151080412, -0.016718404199258217]
)
}, {
'id': 13763,
'time': (1554283273.0824468, 1554283273.1220775, 1554283273.1620576),
'quaternion': (
[0.17855453309035293, 0.005453680566358193, -0.9834562739434834, -0.0300381977216707],
[-0.9705062538096711, -0.029642658768302424, -0.23913505674039495, -0.007304021853201095],
[0.836337807006856, 0.02554468467443435, -0.5473637151080412, -0.016718404199258217]
)
}
]