여러개의 딕셔너리안에서 어느 한 키의 value값이 같으면 그 딕셔너리들을 합치고 싶습니다.


[{'a': 567.0, 'inventory_code': 'SA100426'}, {'a': 1038.94, 'inventory_code': 'SA100426'}]

이러한 리스트 안의 딕셔너리들에서 inventory code의 값이 같으면 a값을 합쳐서 하나의 딕셔너리로 만들고 싶습니다.

[{'a': 1605.94, 'inventory_code': 'SA100426'} 이렇게요

  • 2018년 04월 16일에 작성됨

조회수 45


Hashcode banner summercoding

3 답변


좋아요
1
싫어요
채택취소하기
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'}

  • 2018년 04월 17일에 작성됨


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

  • 2018년 04월 17일에 작성됨

  • 질문좀드려도될까요?    조홍제   2018.4.17 12:26     
  • inventory_code가 같은놈들끼리는 a값을 합치고 싶습니다 안같으면 그대로 놔두구요    조홍제   2018.4.17 12:27     
  • 단순히 보여지는게아니라 a값이 합쳐지면 좋겠습니다! inventory_code가 같으면요    조홍제   2018.4.17 12:30     
  • inventory 값이 같으면 a 값을 더한다는 뜻인가요?    파이썬 유   2018.4.17 13:33     
  • 네 맞습니다!    조홍제   2018.4.17 13:35     
  • sum 작업이면 하면 됩니다만...    정영훈   2018.4.17 16:00     

요청하신 문제를 제대로 읽지 않았습니다. 다시 코드를 만들었습니다. 도움이 되시기를 ...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)
  • 2018년 04월 17일에 작성됨
    교육자. 프로그래밍 비전공자. 취미로 파이썬 공부

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close