Tôi đang cố gắng viết một hàm theo cách thanh lịch, sẽ nhóm một danh sách các từ điển và tổng hợp (tổng hợp) các giá trị của các khóa tương tự.Nhóm và tổng hợp các giá trị của danh sách từ điển trong Python
Ví dụ:
my_dataset = [
{
'date': datetime.date(2013, 1, 1),
'id': 99,
'value1': 10,
'value2': 10
},
{
'date': datetime.date(2013, 1, 1),
'id': 98,
'value1': 10,
'value2': 10
},
{
'date': datetime.date(2013, 1, 2),
'id' 99,
'value1': 10,
'value2': 10
}
]
group_and_sum_dataset(my_dataset, 'date', ['value1', 'value2'])
"""
Should return:
[
{
'date': datetime.date(2013, 1, 1),
'value1': 20,
'value2': 20
},
{
'date': datetime.date(2013, 1, 2),
'value1': 10,
'value2': 10
}
]
"""
Tôi đã cố gắng làm điều này bằng itertools cho groupby và tổng hợp mỗi cặp giá trị như-key, nhưng đang thiếu một cái gì đó ở đây. Dưới đây là chức năng của tôi hiện tại:
def group_and_sum_dataset(dataset, group_by_key, sum_value_keys):
keyfunc = operator.itemgetter(group_by_key)
dataset.sort(key=keyfunc)
new_dataset = []
for key, index in itertools.groupby(dataset, keyfunc):
d = {group_by_key: key}
d.update({k:sum([item[k] for item in index]) for k in sum_value_keys})
new_dataset.append(d)
return new_dataset
Điều này thật tuyệt vời! Bạn có suy nghĩ nào về việc nhóm theo 2 trường? Giống như nói trong ví dụ đó bạn muốn nhóm theo id và ngày? Ngay bây giờ ý tưởng của tôi là nối hai trường thành một, nhưng nó không có vẻ rất tao nhã. – aiguofer