辞書のマージ(同一キーの値は加算) 其の二

さてこの前下記のようなエントリを書いたら、エアリプライが大好きな、戦国大名の人が「同一のキーの値の加算」だったら、Counterオブジェクトでいいのにねぇ。。。みたいな事を、そうエアリプライで教えてくれましたw エアリプライでw ありがとうございます。

こんな感じ

#!/usr/bin/env python
#-*- coding:utf8 -*-
from collections import Counter

d1 = {'a': 1, 'c': 3, 'b': 2}

def merge_dict_add_values(d1, d2):
    return dict(Counter(d1) + Counter(d2))

print merge_dict_add_values(d1, d1) #=> {'a': 2, 'c': 6, 'b': 4}

おぉちゃんと加算されてるw

ただ加算した結果が0以下になると以下のようにキーが消えてしまうので注意

d1 = {'a': 1, 'c': 3, 'b': 2}
d2 = {'a': 1, 'c': -3, 'b': -3}

#加算した結果が0以下になるとキーごと消えてしまう
print merge_dict_add_values(d1, d2) #=> {'a': 2}

#前回のだとキーは消えない
print merge_dict(d1, d2, lambda x, y: x + y) #=> {'a': 2, 'c': 0, 'b': -1}

ぶっちゃけ「collections」モジュール自体知らんかった。。。

おまけ

コレ凄いw 小宮さん凄いw 戦国大名の御館様好きで、Mac持ってる人は、実行してみるといいよ!

$ say -v cellos e ma gah wa yah cut tar yah cut tar yah cut tar e ma gah wa yah cut tar oh yah cut tar sammah

ref: https://twitter.com/tk0miya/status/162086627764731905

@tk0miya++