2017-09-01 20 views
0

これはおそらく重複しているので、何か見つからなかった場合は教えてください。辞書リストの特定のキーの平均値/平均値を返す

私の質問はタイトルにあります。

私は次のコードがそれを行うことは知っていますが、これはどのように行うべきかとは思いません。これは同じことをするきれいな関数にコンパクト化できますか?組み込み関数はどうですか?

def find_sorted_avg(dict_list, key): 
    total = 0 

    for item in dict_list: 
     total += item[key] 

    return total/len(dict_list) 

あなたがそれを行うためのより良い方法を知っている場合は私に知らせてください。

+1

(もちろん、あなたが、これは大声でクラッシュしたい場合は代わりにitem[key]item.get(key,0)を置き換える))

を発行していますdは出力を期待していますか?このコードが動作している場合は、[コードレビュー](https://codereview.stackexchange.com/)を参照してください。 –

+0

はより良いはずです: 'total = sum(dict_listの項目のitem [key])/ len(dict_list)' –

+1

'total + = item [key] 'を意味しますか? – jacoblaw

答えて

5

あなたはsumに発電機の理解を養うことができ、リストの長さで割ると、1行に:

total = sum(item.get(key,0) for item in dict_list)/len(dict_list) 

get(key,0)(キーは1つの辞書に存在しない場合、それはまだ動作することを保証しますキーが辞書にないときに0を使用すると、 `dict_list`、そして何」の例を提供することができます

+0

OK、これはすでにOPよりも多くのことを尋ねています。私は自分の投稿を編集しました(「説明された」とはおそらく悪い言葉です) –

0

これは、キーがdict_listの各辞書にあることを前提としています。あなたがdictsのリストにkeyのすべての値を合計する

reduce(lambda _sum, _dict: _sum + _dict[key], dict_list, 0)/len(dict_list)