티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Is there any pythonic way to combine two dicts (adding values for keys that appear in both)?

두 개의 딕셔너리(둘 다 나타나는 키에 대한 값 추가)를 결합하는 파이썬스러운 방법이 있습니까?

 문제 내용 

For example I have two dicts:

예를 들어, 저는 두 개의 딕셔너리를 가지고 있습니다:
Dict A: {'a': 1, 'b': 2, 'c': 3}
Dict B: {'b': 3, 'c': 4, 'd': 5}

 

I need a pythonic way of 'combining' two dicts such that the result is:

저는 결과가 다음과 같이 되도록 두 개의 딕셔너리를 '결합'하는 파이썬스러운 방법이 필요합니다:
{'a': 1, 'b': 5, 'c': 7, 'd': 5}

 

That is to say: if a key appears in both dicts, add their values, if it appears in only one dict, keep its value.

즉, 키가 두 딕셔너리에 모두 나타나면 값을 추가하고, 하나의 딕셔너리에만 나타나면 값을 유지합니다.

 

 

 

 높은 점수를 받은 Solution 

Use collections.Counter:

collections.Counter를을 사용합니다:
>>> from collections import Counter
>>> A = Counter({'a':1, 'b':2, 'c':3})
>>> B = Counter({'b':3, 'c':4, 'd':5})
>>> A + B
Counter({'c': 7, 'b': 5, 'd': 5, 'a': 1})

 

Counters are basically a subclass of dict, so you can still do everything else with them you'd normally do with that type, such as iterate over their keys and values.

카운터는 기본적으로 딕셔너리의 자식클래스이므로 키 및 값에 대한 반복과 같이 해당 유형으로 일반적으로 수행하는 다른 모든 작업을 계속 수행할 수 있습니다.

 

 

 

 가장 최근 달린 Solution 

One line solution is to use dictionary comprehension.

한 줄짜리 해결책은 딕셔너리 내포를 사용하는 것입니다.
C = { k: A.get(k,0) + B.get(k,0) for k in list(B.keys()) + list(A.keys()) }

 

 

출처 : https://stackoverflow.com/questions/11011756/is-there-any-pythonic-way-to-combine-two-dicts-adding-values-for-keys-that-appe

반응형
댓글
공지사항
최근에 올라온 글