2015-06-22 62 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