我有一个问题完全一样,在这个线程描述:Group by and aggregate the values of a list of dictionaries in Python的Python:集团和字典的名单汇总[未经计数器]
给出的解决方案完美地工作,但是,任何低于2.7的Python和我不工作m试图保持与2.6.6的兼容性。
我的数据看起来像这样(从连接线上面被盗):
my_dataset = [
{
'type': 'type1',
'value1': 10
},
{
'type': 'type2',
'value2': 10
},
{
'type': 'type1,
'value1': 10
}
]
这是我想它返回什么:
[
{
'type': 'type1',
'value1': 20
},
{
'type': 'type2',
'value1': 10
}
]
什么是这样做的最有效的方法没有使用Counter?
UPDATE
Aprillion下面评论,并指示我backport_collections它看起来像它应该是正是我需要的,但我还是对我的2.6.6建立得到错误。
功能如下:
from backport_collections import defaultdict, Counter
def group_and_sum_dataset(dataset, group_by_key, sum_value_keys, sort_by_key):
container = defaultdict(Counter)
for item in dataset:
key = item[group_by_key]
values = {k: item[k] for k in sum_value_keys}
container[key].update(values)
new_dataset = [
dict([(group_by_key, item[0])] + item[1].items())
for item in container.items()
]
new_dataset.sort(key=lambda item: item[sort_by_key], reverse=True)
return new_dataset
当我尝试运行它,我得到一个语法错误:
values = {k: item[k] for k in sum_value_keys}
^
SyntaxError: invalid syntax
仍然运行罚款2.7。不知道这是甚至与计数器有关。
https://pypi.python.org/pypi/backport_collections/0.1? – Aprillion
谢谢@Aprillion,请参阅我上面的更新。 – DrJohnZoidberg
字典压缩在2.6中不受支持。需要做的: 'values = dict(((k,item [k])for sum_value_keys))' – Bernhard