2013-04-24 6 views
0

동일한 키를 공유하는 여러 개의 사전이있는 목록이 있다고 생각하십시오.사전 목록 - 모든 키 (파이썬)에 대한 카운트 값

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'}] 
+0

데이터는 항상 동일한 형식입니까? 그렇다면 튜플 형태로 저장하는 것이 좋습니다 :''data = [('Windows', 3), ('Linux', 2), ..]'' –

답변

5
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'}] 
+0

+1은'groupby'를 언급합니다. –

+0

간단하고 간단합니다! 건배. – norus

+0

감사합니다. Itertools에는 매우 훌륭한 기능과 클래스가 있습니다. –

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을 매우 많이 포함하고 있습니다. 유용한 정보는입니다.

+0

+1. –

+0

-0.1 사용하지 않기 때문에 –

+0

하하, 맞습니다. OP가 자신의 데이터 형식을 변경하는 것을 고려한다면 유용 할 수 있습니다. –