我有一個問題完全一樣,在這個線程描述: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