두 개의 키/값 쌍이있는 dicts 목록이 있습니다. 두 번째 키의 값을 합산하여 첫 번째 키와 동일한 값을 공유하는 사전을 결합해야합니다. 예를 들어 : 속성별로 객체 배열 집계
[
{'foo': 34, 'bar': 5},
{'foo': 35, 'bar': 10}
]
내가 작동하지만 끔찍 자세한 보인다 다음 함수를 썼다, 나는 것이 시원한 파이썬 트릭이 거의 확신 :로
[
{'foo': 34, 'bar': 2},
{'foo': 34, 'bar': 3},
{'foo': 35, 'bar': 1},
{'foo': 35, 'bar': 7},
{'foo': 35, 'bar': 2}
]
가 나올 것입니다 청소기, 그리고 더 performant.
def combine(arr):
arr_out = []
if arr:
arr_out.append({'foo': arr[0]['foo'], 'bar': 0})
for i in range(len(arr)):
if arr[i]['foo'] == arr_out[-1]['foo']:
arr_out[-1]['bar'] += arr[i]['bar']
else:
arr_out.append({'foo': arr[i]['foo'], 'bar': arr[i]['bar']})
return arr_out
누구든지 의견이 있으십니까? itertools.groupby
를 사용
[itertools.groupby] (https://docs.python.org/2/library/itertools.html#itertools.groupby) –
시간 측정 테스트에서 falsetru의 답변이 30 % 이상 우수하기 때문에 fthethethe의 답변을 선택했습니다. 내 가능성이 배열 크기에. 나는 그 차이가 더 큰 배열에 대해서는 더 작을 수 있다고 생각한다. 흥미롭게도 원래 코드는 두 코드 사이에서 수행되었습니다. – domoarrigato
@domoarrigato 'groupby'에 대한 입력이 'sorted'(O (lg N)) 여야하기 때문에 시차가 있다고 생각합니다. 하지만 내 사전 솔루션은 O (N)입니다. – thefourtheye