1

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

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'}]
4

2 回答 2

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'}]
于 2013-04-24T08:51:34.520 回答
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类在这里可能很有用。集合itertools包含很多非常有用的东西。

于 2013-04-24T08:49:38.157 回答