我遇到的问题与此主题中描述的完全相同:Group by and aggregate the values of a list of dictionaries in Python
给定的解决方案可以很好地工作,但是对于低于Python 2.7的任何东西都不起作用,我试图保持与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的情况下,最有效的方法是什么?
更新
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上仍然运行良好。不确定这是否与Counter现在有关。
答案 0 :(得分:3)
您遇到的问题是您正在尝试进行字典理解,直到python 2.7才会添加。
values = dict((k, item[k]) for k in sum_value_keys)