同じキーの値をやみくもに上書きせずに辞書を update() する方法はありますか? たとえば、同じキーが見つかった場合はその値を追加し、キーが見つからない場合は連結するという戦略が必要です。
d1 = {'eggs':3, 'ham':2, 'toast':1}
d2 = {'eggs':2,'ham':1}
dresult = d1.myUpdate(d2)
print dresult
{'eggs':5,'ham':3,'toast':1}
同じキーの値をやみくもに上書きせずに辞書を update() する方法はありますか? たとえば、同じキーが見つかった場合はその値を追加し、キーが見つからない場合は連結するという戦略が必要です。
d1 = {'eggs':3, 'ham':2, 'toast':1}
d2 = {'eggs':2,'ham':1}
dresult = d1.myUpdate(d2)
print dresult
{'eggs':5,'ham':3,'toast':1}
これにはカウンターを使用できます(Python 2.7で導入):
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})
python2.5 +で動作するバージョンが必要な場合は、adefaultdict
も動作する可能性があります(ただし、それほどうまくはいきません)。
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
方法を使用した結果...
カウンターを使用する:
from collections import Counter
d1 = Counter({'eggs':3, 'ham':2, 'toast':1})
d2 = Counter({'eggs':2,'ham':1})
print d1 + d2