2012-08-31 5 views
1

맹목적으로 동일한 키의 값을 덮어 쓰지 않고 사전을 업데이트() 할 수 있습니까? 예를 들어, 내가 찾은 동일한 키에 값을 추가하고 키를 찾을 수없는 경우 연결하는 전략을 원합니다.겹쳐 쓰기가없는 사전 병합, 키 동등성이있는 경우 값 추가

d1 = {'eggs':3, 'ham':2, 'toast':1} 
d2 = {'eggs':2,'ham':1} 

dresult = d1.myUpdate(d2) 

print dresult 
{'eggs':5,'ham':3,'toast':1} 

답변

6

당신은 (파이썬 2.7에서 소개) 이것에 대한 Counter 사용할 수 있습니다 : 당신이 python2.5의 + 작동 버전이 필요하면

from collections import Counter 
d1 = {'eggs':3, 'ham':2, 'toast':1} 
d2 = {'eggs':2,'ham':1} 
dresult = Counter(d1) + Counter(d2) #Counter({'eggs': 5, 'ham': 3, 'toast': 1}) 

가하는 defaultdict도 일할 수를 (비록하지 멋지게) :

from collections import defaultdict  
d1 = {'eggs':3, 'ham':2, 'toast':1} 
d2 = {'eggs':2,'ham':1} 
d = defaultdict(int) 
dresult.update(d1) 
for k,v in d2.items(): 
    dresult[k] += v 

해당하는 python2를 얻을 수 있지만.? 사전의 setdefault 방법을 사용하여 결과는 ...

+0

내가 원래 값이 아닌 정수이라면이 작업을 것이라고 생각하지 않았다 - 예를 들어, 값이 항목 수 또는 목록이 아닌 비용이 아니라면 좋겠지 만 제대로 작동하는 것 같습니다. – DSM

+0

docs에서 @DSM * 참고 카운터는 주로 실행 횟수를 나타내는 양의 정수로 작동하도록 설계되었습니다. 그러나 다른 유형이나 음수 값을 필요로하는 사용 사례를 불필요하게 배제하지 않도록주의를 기울였습니다. 이러한 사용 사례를 돕기 위해이 절에서는 최소 범위 및 유형 제한을 설명합니다. mgilson

+0

(Hums to self) "인생은 단지 학습 게임입니다."매일 매일 새로운 것이 있습니다! – DSM

6

는 카운터를 사용

from collections import Counter 
d1 = Counter({'eggs':3, 'ham':2, 'toast':1}) 
d2 = Counter({'eggs':2,'ham':1}) 
print d1 + d2