辞書のマージ(同一キーの値は加算) 其の二
さてこの前下記のようなエントリを書いたら、エアリプライが大好きな、戦国大名の人が「同一のキーの値の加算」だったら、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++