Pythonの辞書機能とは

Pythonには辞書(dictionary)という機能があるらしい.どのような場面でどのように使用するのか釈然としない.とりあえず小さなサンプルを作って学習してみた.

結論としては,辞書はリストに似た存在ではあるが,{key : value} のペアでリスト化されていて,キーを参照すると,その値が返されるというものである.

データの構造を見ると分かりやすい.以下は九州7県の人口の辞書である.

{'福岡': 5099604, '熊本': 1756944, '佐賀': 818865', 大分': 1143976, '長崎': 1341702, '宮崎': 1081413, '鹿児島': 1616005}

全体は中括弧で括られていて,コロン:の前後がペアになったデータである.関連したデータを別々の配列に記憶させる必要がないのでたいへん便利である.


IDLEのシェルで実行

まずは,辞書の作成はPythonの統合環境,IDLEのシェルで,福岡と熊本のデータをタイプし,辞書名はdic_kjinkoとした.

>>>dic_kjinko = {'福岡': 5099604, '熊本': 1756944} ⬅辞書の基本型を作成

キーの一覧を表示させるには,

>>>list( dic_kjinko.keys() )と打ち込むと,現在登録されているキーが表示される.

['福岡', '熊本']

が返ってくる.

>>> dic_kjinko['福岡'] と入力して福岡の値を表示させると,

5099604

が返ってくる.


辞書の追加

>>> dic_kjinko['佐賀']=818865 ⬅ 佐賀のデータを追加

>>> list( dic_kjinko.keys() ) ⬅ 辞書のキーを表示

['福岡', '熊本', '佐賀']

>>> dic_kjinko['大分']=1143976 ⬅ 大分のデータを追加

>>> dic_kjinko['長崎']=1341702 ⬅ 長崎のデータを追加

>>> dic_kjinko['宮崎']=1081413 ⬅ 宮崎のデータを追加

>>> dic_kyuPjinko['鹿児島']=1616005 ⬅ 鹿児島のデータを追加

>>> list( dic_kjinko.keys() ) ⬅ 辞書のキー(県名)を表示

['福岡', '熊本', '佐賀', '大分', '長崎', '宮崎', '鹿児島']

>>> list( dic_kjinko.values() ) ⬅ 辞書の値(人口)を表示

[5099604, 1756944, 818865, 1143976, 1341702, 1081413, 1616005]

>>> sorted(dic_kjinko.keys()) ⬅ キーでソート(漢字コード順)

['佐賀', '大分', '宮崎', '熊本', '福岡', '長崎', '鹿児島']

>>> sorted(dic_kjinko.keys(),reverse=True) ⬅ キーで逆ソート

['鹿児島', '長崎', '福岡', '熊本', '宮崎', '大分', '佐賀']

>>> sorted(dic_kjinko.values()) ⬅valueでソート

[818865, 1081413, 1143976, 1341702, 1616005, 1756944, 5099604]

>>> sorted(dic_kjinko.values(),reverse=True) ⬅ valueで逆ソート

[5099604, 1756944, 1616005, 1341702, 1143976, 1081413, 818865]


>>> print(dic_kjinko) ⬅ 辞書の全内容を表示

{'福岡': 5099604, '熊本': 1756944, '佐賀': 818865, '大分': 1143976, '長崎': 1341702, '宮崎': 1081413, '鹿児島': 1616005}

>>>


IDLEのエディターでプログラムとして実行

IDLEを起動して新規作成を選択すると,編集画面があらわれる.

dic_kjinko = {'福岡': 5099604, '熊本': 1756944}を入力し保存.

追加するには以下のプログラムを実行する.

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

dic_kjinko['佐賀'] =818865 ⬅辞書に追加

dic_kjinko['大分'] =1143976 ⬅辞書に追加

dic_kjinko['長崎'] =1341702 ⬅辞書に追加

dic_kjinko['宮崎'] =1081413 ⬅辞書に追加

dic_kjinko['鹿児島'] =1616005 ⬅辞書に追加

print(dic_kjinko)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

実行結果

dic_kjinko = {'福岡': 5099604, '熊本': 1756944, '佐賀': 818865, '大分': 1143976, '長崎': 1341702, '宮崎': 1081413, '鹿児島': 1616005}


最大値,最小値等も求めることができる.

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

print(dic_kjinko.keys())

print(dic_kjinko.values())

#valueの最大値・最小値

print(min(dic_kjinko[x] for x in dic_kjinko))

print(max(dic_kjinko[x] for x in dic_kjinko))

#valueで最大・最小を調べ,対応するkeyを得る

print(min(dic_kjinko, key=lambda x:dic_kjinko[x]))

print(max(dic_kjinko, key=lambda x:dic_kjinko[x]))

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

実行結果

dict_keys(['福岡', '熊本', '佐賀', '大分', '長崎', '宮崎', '鹿児島'])

dict_values([5099604, 1756944, 818865, 1143976, 1341702, 1081413, 1616005])

818865

5099604

佐賀

福岡

円グラフを描く処理を追加したプログラム

# utf-8 coding

dic_jinko = {'福岡': 5099604, '熊本': 1756944}


#print(dic_kjinko)


dic_kjinko['佐賀'] =818865 # ⬅辞書に追加

dic_kjinko['大分'] =1143976 # ⬅辞書に追加

dic_kjinko['長崎'] =1341702 # ⬅辞書に追加

dic_kjinko['宮崎'] =1081413 # ⬅辞書に追加

dic_kjinko['鹿児島'] =1616005 # ⬅辞書に追加



print(dic_kjinko)

print(dic_kjinko.keys())

print(dic_kjinko.values())


#valueの最大値・最小値を調べ,表示

print(min(dic_kjinko[x] for x in dic_kjinko))

print(max(dic_kjinko[x] for x in dic_kjinko))


#valueの最大・最小に対応するkeyを得る

print(min(dic_kjinko, key=lambda x:dic_kjinko[x]))

print(max(dic_kjinko, key=lambda x:dic_kjinko[x]))


temp=sorted(dic_kjinko.items(), key=lambda x: x[1], reverse=True) #valueの大きい順に配列を並べ替え. x[1]は辞書もvalue, 辞書のkeyはx[0].

dic_temp=dict(temp) #辞書型へ変換

#print(dic_temp)


#グラフ描画

import matplotlib.pyplot as plt

#plt.rcParams['font.family'] = 'AppleGothic' #日本語表示フォント(別のフォントに変更)

plt.rcParams['font.family'] = 'IPAexGothic'

import numpy as np


plt.title("九州各県の人口比率", loc='left',fontsize=20)

labels = dic_temp.keys()

x = dic_temp.values()


explode = (0, 0.1, 0, 0,0,0,0) #2番めの0.1は少し外側に表示させるため指定

plt.pie(x, labels=labels, startangle=90, autopct='%.1f%%', explode=explode)


plt.axis('equal')

plt.show()

日本語フォントとして AppleGothicを指定したが,九州各県の「県」および 鹿児島の「児」が文字化けした.フォントとして,IPAexGothic をダウンロードしてライブラリ (~/Library/Fonts/) にコピーし,フォントキャッシュを削除すると解決した.

グラフの色は未指定,オート配色

X軸に対して左回り90°から大きい順に表示

%表示は自動計算

タイトルは左寄せ,フォントサイズは20


sxplodeで熊本を浮かせて表示

👈 福岡への一極集中! 2018年4月1日現在

{'福岡': 5099604, '熊本': 1756944, '鹿児島': 1616005, '長崎': 1341702, '大分': 1143976, '宮崎': 1081413, '佐賀': 818865}


👈 1970年の人口比率

データを入れ替えて表示

{'福岡': 4027416, '鹿児島': 1729150, '熊本': 1700229, '長崎': 1570245, '大分': 1155566, '宮崎': 1051105, '佐賀': 838468}

化学分野での利用

自分の専門分野役に立つ利用法がないか考えてみた.まず,思いついたのは「原子番号」と「元素記号」の対応である.別稿で紹介する.