リストを項目ごとに集計する(Python版・暫定)
今週買った本のサンプルコードがすべてPythonで書かれていたので、観念して今日はPythonチュートリアル(http://www.python.jp/doc/release/tutorial/)と向き合っていました。翻訳してくださった方、ありがとうございます。
Hello Worldということで、ためしに次のJavaのコードをPythonで書いてみました。
import sys import collections # class Data(tuple): # コメントで「不要」との指摘を頂いて削除しました # 'Data(code, name, value)' Data = collections.namedtuple('Data', ['code', 'name', 'value']) data_list = [ Data('A01', 'hoge', 100), Data('A01', 'piyo', 200), Data('A02', 'hoge', 300), Data('A03', 'hoge', 400), Data('A03', 'piyo', 500) ] def summarize(code): sum = 0 for d in data_list: if code == d.code: sum += d.value return (code, sum) print map(summarize, set([data.code for data in data_list]))
一応取れました。わぁい。(どういう時にクラスを使うか分かっていない、嬉しがってリスト内包表記を使っている等、明らかに混乱したコードですが…)
そういえば、GroupByはあるのでしょうか。summarizeをフラットに書きたくて試行錯誤したのですが、自力ではまだムリでした。data_listを明示的に渡さずに、summarizeの中から(スコープ任せで)参照していますが、これを改善したいです。
まあ、また、そのうちに。