2016-06-18 2 views
-2

가정하자 I가 두 사전사전 병합

a = {'milk':90, 'coffee':80, 'rice':100, 'Cheese': 70} 

b = {'milk':90, 'coffee':80, 'pulses': 100,'Alcohol':750} 

I과 같이 생성을 제공한다 사전 공통 요소의 값에 가산함으로써이 두 사전 병합 할 :

c = {'milk':180, 'coffee':160, 'rice':100, 'Cheese':70, 'pulses':100, 'Alcohol':750} 

I을 내 수준에서 이것을 시도한 사람이 있다면이 문제에 대한 해결책이 있는지 제안하십시오.

답변

3

사용을 중 dicts의 keys을하고 그 중 하나에 고유 한 항목에 문제가되지 않도록, 세 번째를 만들기 위해 자신의 가치를 추가 할 수 있습니다. 해당 항목이없는 경우 (우리가 추가하는 때문에) 0을 디폴트 두 dicts에서 각 키에 대한 값을 가져 오도록 dict.get를 사용합니다.

>>> c = {} 
>>> for key in set(a.keys() + b.keys()): 
...  c[key] = a.get(key, 0) + b.get(key, 0) 
... 
>>> c 
{'Cheese': 70, 'coffee': 160, 'Alcohol': 750, 'pulses': 100, 'rice': 100, 'milk': 180} 

그리고 그의 한 줄 버전, 당신이 선호하는 경우 : 당신은 당신이 기존의 DICT를 업데이트 한 다음 새 딕셔너리`c`를 생성하지만하고있어

>>> d = {key: a.get(key, 0) + b.get(key, 0) for key in set(a.keys() + b.keys())} 
>>> d == c 
True 
>>> 
+0

좋은 정보. 나는 내가 더 좋아하는 사람의 해결책을 확신하지 못한다!/ –

+0

그리고 내 대답은 속는 질문에 [답변 중 하나의 근접 속는] (http://stackoverflow.com/a/11011911/1431750)로 나타납니다. (또는, 성가신 관용구에 "파이썬") – aneroid

+1

이 표준 스타일의 것을 나타내는 - : :) –

1

이 같은 시도 할 수 :

>>> def merge_dicts(a,b): 
... c = {} 
... for k, v in a.items(): 
...  c[k] = a[k] + b.get(k, 0) 
... b.update(c) 
... return b 
... 
>>> merge_dicts(a,b) 
{'Cheese': 70, 'coffee': 160, 'Alcohol': 750, 'pulses': 100, 'rice': 100, 'milk': 180} 
>>> 

참고 : 여기 이해하지 거기에 아무것도 물어 주시기 바랍니다가 - 당신은 그들이 이유에 명확하지 않은 경우가 좋은 단지 학습 주술 없습니다 작업!

+0

주'b' 그걸 돌려 줘. 즉. 'b'는'merge_dicts'를 호출 할 때 수정됩니다. – aneroid

+0

Hello Jon, 우선,이 문제를 해결할 수있는 좋은 소스 코드에 대해 감사드립니다. 매개 변수를 사용하여 일반화하고 코드 내에서 다시 사용해야하는 경우 함수를 만드는 것이 한 가지 방법입니다. 네가 한 것처럼 내가 고맙다. 거대한 도움이됩니다. 다시 한 번 감사드립니다. 그것은 나를 위해 일했습니다. 또한 내 대답에 게시 할뿐만 아니라 내 솔루션을 생각해 냈습니다. 확인해주세요. : 거대한 감사 및 감사 Ripundeep 길 –

+0

A = { '우유'(90), '커피'80, '쌀'100, '치즈': 70}, B = { '우유'(90), '커피' : 80, 'pulses': 100, 'Alcohol': 750}, 콜렉션 가져 오기에서 카운터 a = 카운터 (a) b = 카운터 (b) c = a + bc = dict (c) print c 출력 : { 'Cheese' : 70, '커피': 160, '펄스': 100, '알콜': 750, '쌀': 100, '우유': 180} –

관련 문제