【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} |
関連記事
-
【Atom エディタ】Python で Matplotlib のグラフを Atom 上に表示させる方法。
Atom エディタで Python の Matplotlib ライブラリを使って、Atom 上にグラ
-
【Python】漢字を分解するライブラリを使ってみた【部首分解】
Python で漢字を部首やさらに細かい部分に分解してくれるライブラリがあったので使ってみました。
-
【Python】プログレスバーを表示させる【tqdm】
Python でスクリプトの実行時間が長くなると、進捗状況が知りたくなったので、標準出力にどのくらい
-
【Python】Windows で ライブラリ(NumPy) をインストールする方法。
Windows の Python(2.X系)で NumPy をインストールしようと思ったら、そもそも
-
【matplotlib】 Python でヒストグラムの横軸と棒(ビン)の数を調整する方法。
Python の matplotlib を使ってヒストグラムを描画し、横軸の目盛りと棒(ビン)がそろ
-
【Python】時系列データ(為替データ)をグラフ表示してみた。
今回は、pandas・matplotlib ライブラリを使って、時系列データ(為替データ)をグラフ表
-
【Pandas】 DataFrame で2行の列ごとの差を計算する方法【Python】
今回は、Pandas の DataFrame で、2行間の列ごとの値の差を計算し、その結果を Dat
-
【Spyder】引数のあるスクリプトを実行する方法。
Python の統合開発環境(IDE)である Spyder では、簡単にスクリプトを実行できます。
-
【Python】API を使って YouTube から動画情報を収集する方法。
API を使って YouTube から動画情報を収集してみたときのメモです。 OS は Lin
-
【Python】 Series 型を dict(辞書型)に変換する方法。
Python で Series 型を dict(辞書型)に簡単に変換する方法を紹介します。 「