【Python】 複数の辞書型の同じ key を持つ value を計算に用いる方法。
Python で、複数の辞書型を読み込んで、同じキー(key)を持つ数値(value)を計算に使う方法を紹介します。
以下のような2つの辞書型があるとします。
●辞書型の「f_count」
1 |
{'tottokosa': 6, 'akikirara1122': 5, 'houzankai2006': 3, 'amanjuli03': 3, 'nama_k1': 3, 'maruru39': 2, 'ddogs38': 2, 'sasaootako': 2, 'nipponko2007': 2, 'asakaakie_blog2': 2, 'papakoa': 2, 'umayado17': 2, 'fpdxw092': 2, 'cotsplace': 1, 'juveneko': 1, 'macyaken': 1, 'a6789012002': 1, 'saba2006201': 1, 'tposato1': 1, 'sanmamini91': 1, 'wwide1225': 1} |
●辞書型の「t_count」
1 |
{'choco_suki2': 8, 'a6789012002': 8, 'chimm324': 8, 'nobsenna0115': 7, 'tposato1': 7, 'sanmamini91': 6, 'amanjuli03': 5, 'juveneko': 5, 'saba2006201': 5, 'chanchankoiro': 5, 'umayado17': 4, 'asakaakie_blog2': 4, 'papakoa': 4, 'ashino817': 4, 'akikirara1122': 4, 'tottokosa': 4, 'macyaken': 3, 'maruru39': 3, 'houzankai2006': 3, 'cotsplace': 3, 'ddogs38': 2, 'fpdxw092': 2, 'xyjtn120': 2, 'higashidake': 2, 'wwide1225': 2, 'nipponko2007': 2, 'nama_k1': 2, 'casablanca117531': 1, 'yuushi2011': 1, 'sasaootako': 1, 'taimaemiko': 1} |
この2つの辞書の共通する key の数値(value)同士を足し算したり割り算したりして、最終的に 割合 を算出します。
1 2 3 4 5 6 7 |
for k in (f_count_dict.keys() | t_count_dict.keys()): f_count_num = int(f_count_dict.get(k) or 0) t_count_num = int(t_count_dict.get(k) or 0) rate = round( f_count_num / (f_count_num + t_count_num), 2) print(k+','+str(rate)) # 辞書に格納(追加) rate_dict.setdefault(k, rate) |
まず、複数の辞書(dict)からキー(key)を取り出すには、「f_count_dict.keys() | t_count_dict.keys()」のように、「|」でつなぎます。
dict から key を指定して value を取り出す方法は2つあります。
1 2 |
dict.get(key) dict[key] |
今回は、片方にしか存在しない key が出てくるので、dict[key] で取り出すとエラーになってしまいます。なので dict.get(key) を使います。
また、後々計算ができるように value を int型に変換します。
1 2 |
f_count_num = int(f_count_dict.get(k) or 0) t_count_num = int(t_count_dict.get(k) or 0) |
「or 0」としているのは、key が存在せず None となったときに数値の「0」を入れるためです。
結果は以下のようになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
maruru39,0.4 saba2006201,0.17 papakoa,0.33 chimm324,0.0 asakaakie_blog2,0.33 ashino817,0.0 yuushi2011,0.0 fpdxw092,0.5 chanchankoiro,0.0 xyjtn120,0.0 tottokosa,0.6 nipponko2007,0.5 sasaootako,0.67 wwide1225,0.33 houzankai2006,0.5 akikirara1122,0.56 choco_suki2,0.0 umayado17,0.33 tposato1,0.12 a6789012002,0.11 amanjuli03,0.38 juveneko,0.17 ddogs38,0.5 nobsenna0115,0.0 macyaken,0.25 nama_k1,0.6 taimaemiko,0.0 sanmamini91,0.14 higashidake,0.0 cotsplace,0.25 |
辞書型に格納するには、setdefault 関数を使います。
setdefault( key, value ) とすると辞書に追加できます。
1 |
{'macyaken': 0.25, 'xyjtn120': 0.0, 'yuushi2011': 0.0, 'papakoa': 0.33, 'umayado17': 0.33, 'nama_k1': 0.6, 'tposato1': 0.12, 'sasaootako': 0.67, 'saba2006201': 0.17, 'chanchankoiro': 0.0, 'fpdxw092': 0.5, 'nobsenna0115': 0.0, 'amanjuli03': 0.38, 'wwide1225': 0.33, 'juveneko': 0.17, 'cotsplace': 0.25, 'casablanca117531': 0.0, 'tottokosa': 0.6, 'a6789012002': 0.11, 'sanmamini91': 0.14, 'maruru39': 0.4, 'asakaakie_blog2': 0.33, 'ashino817': 0.0, 'choco_suki2': 0.0, 'ddogs38': 0.5, 'chimm324': 0.0, 'higashidake': 0.0, 'houzankai2006': 0.5, 'nipponko2007': 0.5, 'taimaemiko': 0.0, 'akikirara1122': 0.56} |
関連記事
-
【Python】OpenCV を使って顔画像を検出してみた。
OpenCV のインストール Numpy のインストール [crayon-67542868f
-
【Atomエディタ】Python 開発用にインストールしてみた。
Python でプログラミングするときの エディタ を探していたのですが、とりあえず Atom とい
-
【matplotlib】 Python で折れ線グラフを描く方法。
今回は、Python の matplotlib というライブラリを使って簡単に折れ線グラフを描く方法
-
【OpenCV】検出した顔画像部分を切り出す方法【Python】
OpenCV を使って、Python で画像の中から顔部分を切り出したときのメモです。 顔部分
-
【Atom エディタ】Python で Matplotlib のグラフを Atom 上に表示させる方法。
Atom エディタで Python の Matplotlib ライブラリを使って、Atom 上にグラ
-
【Python】pip3 で「cannot import name ‘main’」エラーが出たときの対処法。
Python でライブラリをインストールする際に、pipを使います。 Python2 と Py
-
【Python】Windows で ライブラリ(NumPy) をインストールする方法。
Windows の Python(2.X系)で NumPy をインストールしようと思ったら、そもそも
-
【Python】漢字を分解するライブラリを使ってみた【部首分解】
Python で漢字を部首やさらに細かい部分に分解してくれるライブラリがあったので使ってみました。
-
【Google Colaboratory】クラウド上でPythonを使って機械学習を行う。
Python をブラウザ上で実行して、手軽に機械学習ができる環境「Google Colaborato
-
【OpenCV】画像の顔部分を検出する方法【Python】
OpenCV を使って、Python で画像から顔部分の検出を行ったときのメモです。 Anac