2015-06-22 36 views
1

我有一个问题完全一样,在这个线程描述: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。不知道这是甚至与计数器有关。

+0

https://pypi.python.org/pypi/backport_collections/0.1? – Aprillion

+0

谢谢@Aprillion,请参阅我上面的更新。 – DrJohnZoidberg

+1

字典压缩在2.6中不受支持。需要做的: 'values = dict(((k,item [k])for sum_value_keys))' – Bernhard

回答

3

你遇到的问题是,你正试图做一个字典理解,直到python 2.7才加入。

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

啊!谢谢。作为一个Python noob我完全错过了这一点。那么解决好两个兼容性问题吧。干杯! – DrJohnZoidberg