Python:字典的组和汇总列表[无计数器]

时间:2015-06-22 08:31:14

标签: python dictionary python-2.6

我遇到的问题与此主题中描述的完全相同: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现在有关。

1 个答案:

答案 0 :(得分:3)

您遇到的问题是您正在尝试进行字典理解,直到python 2.7才会添加。

values = dict((k, item[k]) for k in sum_value_keys)