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つ:辞書型の定義と出力について記載しました。
覚えておくと、表(テーブル)で管理されているデータを扱う際など色んな場面で役立ちます。
ぜひ、参考にしてみて下さい。