2

同じキーの値をやみくもに上書きせずに辞書を 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}
4

2 に答える 2

7

これにはカウンターを使用できます(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方法を使用した結果...

于 2012-08-31T14:36:12.417 に答える
6

カウンターを使用する:

from collections import Counter
d1 = Counter({'eggs':3, 'ham':2, 'toast':1})
d2 = Counter({'eggs':2,'ham':1})
print d1 + d2
于 2012-08-31T14:36:56.473 に答える