키가 겹치는 두개의 dict를 합치는 방법


두개의 dict를 합칠 때 겹치는 key가 있으면 그 key에 대응하는 값을 더해주고 싶습니다.

예를 들어 다음 A, B가 있다고 할 때 Dict A: {'a':1, 'b':2, 'c':3} Dict B: {'b':3, 'c':4, 'd':5}

두개의 dict를 합쳐서 {'a':1, 'b':5, 'c':7, 'd':5} 같은 결과를 내는 함수가 필요합니다.

어떤 게 가장 파이썬스러운 방법일까요?

  • 2016년 01월 19일에 작성됨

조회수 219


1 답변


좋아요
0
싫어요
채택취소하기

1. collections.Counter를 쓰는 방법 - dict의 value가 숫자인 경우

[collections.Counter]는 dict의 하위 클래스로, keykey의 count값을 key-value 쌍으로 저장해 줍니다. *다만, dictvalue가 숫자인 경우만 쓸 수 있습니다.

from collections import Counter
A = Counter({'a':1, 'b':2, 'c':3})
B = Counter({'b':3, 'c':4, 'd':5})
print(A + B)

결과 : Counter({'c': 7, 'b': 5, 'd': 5, 'a': 1})

2. 1보다 좀 더 범용(dict의 value가 숫자가 아닌 경우)적인 방법(2.x에서만)

  • int 외에도 스트링 등을 이어 붙이는 방법
a = {'a': 'foo', 'b':'bar', 'c': 'baz'}
b = {'a': 'spam', 'c':'ham', 'x': 'blah'}

r = dict(a.items() + b.items() +
    [(k, a[k] + b[k]) for k in set(b) & set(a)])
  • 덧셈, 곱셈, 나눗셈 등의 연산을 지원하는 방법
import operator
def combine_dicts(a, b, op=operator.add):#덧셈(add), 곱셈(mul), 나눗셈(div)등의 연산을 지원
    return dict(a.items() + b.items() +
        [(k, op(a[k], b[k])) for k in set(b) & set(a)])

a = {'a': 'foo', 'b':'bar', 'c': 'baz'}
b = {'a': 'spam', 'c':'ham', 'x': 'blah'}
print(combine_dicts(a,b))

결과 : {'a': 'foospam', 'x': 'blah', 'c': 'bazham', 'b': 'bar'}


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

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