2016-04-15 5 views
2

最後に実行し報告するときに統計を収集するときに、短いプログラムを書くことがよくあります。私は通常、最後に表示するためにこれらの統計を辞書に集めます。Python辞書を使ってプログラム統計情報を保持するためのきれいな方法

私は以下のような単純な例のように書いていますが、これを行うにはもっと洗練された方法があると思います。この方法は、いくつかのメトリックがある場合には、かなり大きく(またはネストされて)大きくなる可能性があります。

stats = {} 

def add_result_to_stats(result,func_name): 
    if not func_name in stats.keys(): 
     stats[func_name] = {} 
    if not result in stats[func_name].keys(): 
     stats[func_name][result] = 1 
    else: 
     stats[func_name][result] += 1 

答えて

2

で行くことにしている場合あなたがadd_result_to_stats 1のライン減らすことになるCounterdefaultdictを組み合わせることができます

from collections import defaultdict, Counter 
stats = defaultdict(Counter) 

def add_result_to_stats(result, func_name): 
    stats[func_name][result] += 1 

add_result_to_stats('foo', 'bar') 
print stats # defaultdict(<class 'collections.Counter'>, {'bar': Counter({'foo': 1})}) 
+0

を、私はこれを好みますその印刷能力に答える – dodell

1

あなただけfunc_namesをカウントしresultsCounter

import collections 
stats = collections.Counter() 

def add_result_to_stats(result,func_name): 
    stats.update({(func_name, result):1}) 
関連する問題