여러개의 딕셔너리안에서 어느 한 키의 value값이 같으면 그 딕셔너리들을 합치고 싶습니다.
조회수 3654회
[{'a': 567.0, 'inventory_code': 'SA100426'}, {'a': 1038.94, 'inventory_code': 'SA100426'}]
이러한 리스트 안의 딕셔너리들에서 inventory code의 값이 같으면 a값을 합쳐서 하나의 딕셔너리로 만들고 싶습니다.
[{'a': 1605.94, 'inventory_code': 'SA100426'} 이렇게요
3 답변
-
inventory = [{'a': 567.0, 'inventory_code': 'SA100425'}, { 'a': 1038.94, 'inventory_code': 'SA100426'}, { 'a': 1038.94, 'inventory_code': 'SA100426'}, { 'a': 1038.94, 'inventory_code': 'SA100428'}, { 'a': 1038.94, 'inventory_code': 'SA100426'}] import itertools inventory = sorted(inventory, key=lambda x: x['inventory_code']) for _, v in itertools.groupby(inventory, lambda i:i['inventory_code']): items = list(v) first_item = items[0] first_item['a'] = sum(item['a'] for item in items) print(first_item) {'a': 567.0, 'inventory_code': 'SA100425'} {'a': 3116.82, 'inventory_code': 'SA100426'} {'a': 1038.94, 'inventory_code': 'SA100428'}
-
itertools 모듈을 사용해보세요.
groupby 함수는 인접해있는 같은 것들을 하나로 묶어줍니다.
inventory = [{'a': 567.0, 'inventory_code': 'SA100425'}, { 'a': 1038.94, 'inventory_code': 'SA100426'}, { 'a': 1038.94, 'inventory_code': 'SA100426'}, { 'a': 1038.94, 'inventory_code': 'SA100428'}, { 'a': 1038.94, 'inventory_code': 'SA100426'}] import itertools inventory = sorted(inventory, key=lambda x: x['inventory_code']) # 소팅하여 같은 것들끼리 배열한다. for i, v in itertools.groupby(inventory, lambda i:i['inventory_code']): # inventory_code 로 같은 것끼리 묶는다. print(list(v)) [{'a': 567.0, 'inventory_code': 'SA100425'}] [{'a': 1038.94, 'inventory_code': 'SA100426'}, {'a': 1038.94, 'inventory_code': 'SA100426'}, {'a': 1038.94, 'inventory_code': 'SA100426'}] [{'a': 1038.94, 'inventory_code': 'SA100428'}]
-
요청하신 문제를 제대로 읽지 않았습니다. 다시 코드를 만들었습니다. 도움이 되시기를 ...inventory도 제가 약간 수정을 했네요. 문제가 되지 않겠지만요. 참고로 처음에 올린 코드는 완전 잘못된 것입니다.
from collections import defaultdict inventory = [{'code': 25, 'amt': 3300}, { 'code': 26, 'amt': 2990}, {'code': 26, 'amt': 1290}, {'code': 28, 'amt': 1990}, {'code': 26, 'amt': 3350}] c = defaultdict(int) for d in inventory: c[d['code']] += d['amt'] new_inventory = [{'code': code, 'amt': amt} for code, amt in c.items()] print(new_inventory)
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력