带字典的列表 - 计算所有键的值(Python)

时间:2013-04-24 08:42:42

标签: python

考虑到有一个包含多个词典的列表,共享相同的键。

data = [{'count': 3, 'os': 'Windows'},
        {'count': 2, 'os': 'Windows'},
        {'count': 5, 'os': 'Linux'},
        {'count': 1, 'os': 'Linux'}]

如何总结他们的价值观?预期:

data = [{'count': 5, 'os': 'Windows'},{'count': 6, 'os': 'Linux'}]

2 个答案:

答案 0 :(得分:6)

import itertools

data = [
    {'count': 3, 'os': 'Windows'},
    {'count': 2, 'os': 'Windows'},
    {'count': 5, 'os': 'Linux'},
    {'count': 1, 'os': 'Linux'}
]

results = []
for key, val in itertools.groupby(data, lambda v: v['os']):
    count = sum(item['count'] for item in val)
    results.append({'count' : count, 'os' : key})

>>> results
>>> [{'count': 5, 'os': 'Windows'}, {'count': 6, 'os': 'Linux'}]

答案 1 :(得分:1)

from collections import defaultdict

sum_dict = defaultdict(int)

for d in dicts: # your dictionaries
    for key, value in d.iteritems():
        sum_dict[key] += value

当然,您可以将其压缩为单个工作,但不太可读的单行。此外,课程Counter在这里可能很有用。 collectionsitertools包含大量非常有用的内容。