【SikuliX】【Python】辞書型を使ってみよう~定義と出力~

Pythonがデータを持つ方法の1つに、辞書(dictionary)型というものがあります。

これは、他の言語でも存在する概念で、覚えておくと色んな場面で役立つものかと思います。

今回は、そんな辞書型について、まとめていきます。

スポンサーリンク

辞書(dictionary)型とは

辞書は、データの持ち方(データ構造)の1つのあり方です。「キー」と「値」をセットで格納します。これにより、「キー」を指定することで紐づく「値」を取り出すことができます。

この「キー」は「値」を指す印(インデックス)となるので、変更することや重複させることはできません。

こういったデータの持ち方は、Pythonにおける標準のデータ構造では、唯一のものになります。

辞書を使用するメリット

辞書のメリットとしては、何といっても、格納順を意識しなくて済むことかと思います。

辞書では「キー」を指定することで、格納順を意識することなく紐づく「値」を取り出せます。

これにより、リストなどとは異なり、順番を意識(確認)せずに欲しい「値(要素)」を参照したり、抽出したりすることができます。

辞書を使用するデメリット

辞書のデメリットとしては、リストのように要素の場所を直接指定するわけではないので、場合によってはキーの探索に時間がかかる(処理が遅くなる)ことが挙げられると思います。

また、不慣れな方は、概念の理解に時間がかかるかもしれません。

【参考】他の言語では・・・

辞書これは、他にも、「連想配列」「ハッシュ」「マップ」のように呼ばれることもあり、Pythonではない他のプログラミング言語でも存在しています。

例えば、Javaでは、JavaSEに標準搭載されている「Map」「HashMap」「TreeMap」「Hashtable」などが該当します。C#では、Pythonと同じように辞書型のDicrionaryクラスが存在しています。

辞書(dictionary)型の操作

宣言された辞書型では、キーと値の「登録(追加)」「出力(取り出し)」「値の修正」「削除」「検索」などの操作ができます。

本記事ではその中でも【宣言】【出力】について、記載していきます。

宣言の方法

辞書を宣言する方法は、1つではありません。何種類かあるので、一部を記載してみます。

なお、引数(設定する「キー」)が何も与えられなかった場合、空の辞書が作成されます。

基本形

宣言は、中括弧({ })を用いて、「キー:値」の形式で記載していきます。

具体的には、以下のようになります。

コードサンプル:

dict = {‘one’:1, ‘two’:2, ‘three’:3,・・・}

なお、「キー」として扱えるものは、「数値」や「文字列」などになります。文字列は、「’(シングルクォーテーション)」もしくは「”(ダブルクォーテーション)」で囲むようにします。

内包表記

内包表記を利用して辞書を宣言することもできます。

コードサンプル(内包表記):

dict = {x: x for x in range(3)}

上記では、「x:」で x が「キー」となり、内包表記により「0」から「2」までの値が紐づくようになります。

具体的には、以下のように宣言した場合と同じになります。

コードサンプル:

dict = {0:0, 1:1, 2:2}

コンストラクタ型

コンストラクタを用いて、辞書を宣言する方法もあります。

以下の2つの方法では、上記の「{“one”: 1, “two”: 2, “three”: 3}」と同じ内容の辞書を宣言しています。

コードサンプル:

const1 = dict(one=1, two=2, three=3)

コードサンプル:

const2 = dict([(‘one’,1),(‘two’,2),(‘three’,3)])

なお、異なるコンストラクタ型での定義や「{ }」を使用した基本形を混ぜて利用すると、以下のようなTypeErrorになります。必ず記載方法は統一するようにしましょう。

エラーサンプル:

TypeError: ‘dict’ object is not callable

また、後者については以下と同義であるため、リストから辞書型への変換していることになります。

コードサンプル:

list = [(‘one’,1),(‘two’,2),(‘three’,3)]const2 = dict(list)

加えて以下のように、多次元配列のように、入れ子にすることも可能です。

コードサンプル:

list = [[‘one’,1],[‘two’,2],[‘three’,3]]const2 = dict(list)

スポンサーリンク

出力(取り出し)の方法

値を取り出すことで、「キー」に紐づいた「値」を変数に代入して使用したり、そのまま出力したりすることが可能です。

「キー」を指定して出力

出力では、「キー」を指定して行います。「キー」の指定は、「辞書名[キー]」の形式で行います。

なお、存在しないキーを使って値を取り出そうとするとKeyErrorになります。

具体的には、以下のようになります。

コードサンプル:

dict = {‘one’:1, ‘two’:2, ‘three’:3}
output = dict[‘one’]

print(output)
print(dict[‘two’])

実行結果:

1
2

また、別の方法で「辞書名.get(‘キー’, ‘キーがない時に表示したい内容’)」を用いることもできます。

なお、「キーがない時に表示したい内容」は記載しなくても良いです。その場合は、「None」を返します。上記との違いは「KeyErrorは返されない」「キーがない時に任意の値を返すことが可能」ということです。

コードサンプル:

dict = {‘one’:1, ‘two’:2}

get1 = dict.get(‘one’)
print(get1)

get2 = dict.get(‘two’, ‘The key is NOTHING.’)
print(get2)

get3 = dict.get(‘three’)
print(get3)

get4 = dict.get(‘four’, ‘The key is NOTHING.’)
print(get4)

実行結果:

1
2
None
The key is NOTHING.

辞書の内容を出力

出力時に「辞書名」を指定することで、辞書の内容を辞書型で取得することができます。

コードサンプル:

dict = {‘one’:1, ‘two’:2, ‘three’:3}

print(dict)

実行結果:

{‘one’: 1, ‘two’: 2, ‘three’: 3}

全ての「値」を取得

Pythonの辞書では、全ての「値」を取り出す場合、「キー」を指定せずに取り出す事もできます。

それには、「辞書名.values()」を使用します。この場合、返り値はリスト型です。

コードサンプル:

dict = {‘one’:1, ‘two’:2, ‘three’:3}

print(dict.values())

実行結果:

dict_values([1, 2, 3])

全ての「キー」を取得

「値」を取り出す場合と同様に、全ての「キー」を取り出す事もできます。

その場合は、「辞書名.keys()」を使用します。なお、「値」と同様に、返り値はリスト型です。

コードサンプル:

dict = {‘one’:1, ‘two’:2, ‘three’:3}

print(dict.keys())

実行結果:

dict_keys([‘one’, ‘two’, ‘three’])

ループを使用

また、辞書に登録されている「キー」「値」を取り出すには、ループを使用する方法もあります。

存在確認の「in(詳細は別途)」と辞書内の項目を返す「辞書名.items()」を利用します。

「items()」は、辞書の要素をリスト(「キー」と「値」がセットのタプル形式)に変換して取り出すことができるものです。

コードサンプル:

dict = {‘one’:1, ‘two’:2, ‘three’:3}

for key, value in dict.items():

print(key, value)

実行結果(内包表記):

one 1
two 2
three 3

なお、上記for文の「key」「value」は、分かりやすい名称にしているだけで任意の変数名で構いません。

まとめ

今回は、pythonにおけるデータの持ち方の1つ:辞書型の定義と出力について記載しました。

覚えておくと、表(テーブル)で管理されているデータを扱う際など色んな場面で役立ちます。

ぜひ、参考にしてみて下さい。

スポンサーリンク