我試圖用一種優雅的方式編寫一個函數,它將對字典列表進行分組,並聚合(總和)類似於鍵的值。按Python聚合字典列表的值
例子:
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
}
]
"""
我試着這樣做使用itertools爲GROUPBY,總結每個樣鍵值對,但我失去了一些東西。下面是我的功能目前是這樣的:
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
這太棒了!你有任何關於按2個字段分組的想法嗎?就像在那個例子中說的,你想按ID和日期分組?現在我的想法是將兩個字段連接成一個,但看起來不太優雅。 – aiguofer