또 다른 해결책, GROUPBY 및 목록, 딕셔너리와 발전기 함축 사용 :
을
list1=[{'a':'apples', 'b':'snack','count':2},{'a':'apples','b':'lunch','count':3},{'a':'apples','b':'snack','count':3}]
from itertools import groupby
list1.sort()
group_func = lambda x: {key:val for key, val in x.iteritems() if key!='count'}
list2 = [dict(k, count = sum(item['count'] for item in items)) for k, items in groupby(list1, group_func)]
[{'a': 'apples', 'count': 3, 'b': 'lunch'}, {'a': 'apples', 'count': 5, 'b': 'snack'}]
설명 :
- 그룹화 기능 항목을 취해 서브 딕셔너리 0을 반환'dict-comprehension'을 사용하는 'count'항목이 없습니다.
- 그런 다음 groupby는 동일한 하위 그룹이있는 모든 원래 목록 항목을 수집합니다.
- 마지막으로 목록 이해는 해당 그룹 및 합계 (이제 생성자 사용을 사용)에서 반복 항목을 반복합니다.
단점 :
- 덜 읽을 수 있습니다.
- groupby를 작동 시키려면 정렬이 필요하므로 작업 속도가 느려질 수 있습니다.
장점은 :
- 목록 1은 이미 아마 빠른 분류됩니다. (왜냐하면 일반적으로 파이썬에서는 보급이 더 빠름)
- 더 짧습니다. (심지어 단 하나의 간신히 이해할 수있는 라인에 쓸 수 있습니다 :))
그건 작동합니다. 매우 감사합니다. – JMcClure