IT

Pythonのコードの書き方(辞書)

今回は前回に続き、Pythonの中でも重要となる、コンテンツ型の辞書について紹介します。

特徴

辞書とは一般的なプログラミング言語でいうとコレクションと同等のものです。辞書はデータを『キーと値』を1セットとして保持しており、『{ー1:値1,キー2:値2,・・・}』のように記述します。キーも特に連番である必要もありません。辞書の特徴を以下に列挙します。

・キーにはリストと辞書以外の大半のオブジェクト(数値や文字、文字列、関数など)を格納できる
・値はどんな型でも格納できる

キーにはリストと辞書以外のオブジェクトなら大体OK

辞書のキーはリストと辞書以外のオブジェクトならば大体使えます。例えば、数値や文字、文字列に加え、関数も使うことができます。


>>> a = {1:'java',"program":"python"}
>>> a["program"]
'python'

 

値にはどんな型でもOK

次は値について説明します。値はどんな型を格納してもよいです。同時にキーさえ異なれば、複数の型が混在した辞書を作成することも可能です。


>>> a = {1:1,'java':2,3:[1,2,3]}
>>> a[3]
[1, 2, 3]

次からは辞書の作成と参照、更新、削除について紹介します。

辞書を新しくつくる

ここでは辞書の作成方法について3つ紹介します。

直接指定してつくる

冒頭のサンプル内でもあるように直接『{キー1:値1,キー2:値2・・・}』という書き方で辞書をつくることが出来ます。

オブジェクトを使ってつくる(dictオブジェクト)

直接指定して作る以外に引数型の『dict(キー1=値1,キー2=値2,・・・)』で作成することが出来ます。また、タプル型の『dict([(キー1,値1),(キー2,値2),・・・])』やリテラル型の『dict({キー1:値1,キー2:値2,・・・})』でも作成できます。

引数型のdictオブジェクト

キーに文字または文字列を指定する際には「’」ないし「”」は不要そうです。また、なぜかキーを数値に指定することができません。


>>> a = dict(java = 'A',python = 'B')
>>> a
{'python': 'B', 'java': 'A'}

 

タプル型のdictオブジェクト

引数にタプル型を扱うdictオブジェクトです。タプルについては後日説明します。


>>> a = dict([('java','A'),('python','B')])
>>> a
{'python': 'B', 'java': 'A'}

 

リテラル型のdictオブジェクト

引数にリテラル型を扱うdictオブジェクトです。


>>> a = ({'java':'A','python':'B'})
>>> a
{'python': 'B', 'java': 'A'}

 

リストからつくる(dict.fromkeys(シーケンス,初期値))

3つ目は『dict.fromkeys(シーケンス,初期値)』を使って辞書を作成する方法です。これはdictオブジェクトの関数です。シーケンスの値を辞書のキーとして、そのキーに対応する値をは全て初期値(指定がなければNone)となります。


>>> a = dict.fromkeys(['java','python'],'A')
>>> a
{'python': 'A', 'java': 'A'}

全てのキーの初期値を統一して作成したい場合には有用です。

辞書の値を参照する

辞書の値を参照する方法として「直接キーを指定する」方法と「関数を使ってキーを指定する」方法について紹介します。

直接キーを指定して参照する

直接キーを指定して参照するには『辞書[キー] 』を記述します。存在していれば、対応する値を返し、なければ「KeyError」が発生します。


>>> a = ({'java':'A','python':'B'})
>>> a
{'python': 'B', 'java': 'A'}
>>> a['python']
'B'

 

関数を使って値を参照する(.get(キー,初期値))

ここでは『.get(キー,初期値)』を使います。これは直接指定する場合と同じで指定したキーに対応する値を返しますが、該当する値がなければ、「KeyError」ではなく、「初期値」を返します。(初期値を指定しなかった場合は「None」が返ります)


>>> a = ({'java':'A','python':'B'})
>>> a.get('python')
'B'

 

キーや値の一覧を参照する

ここではキーや値の一覧の参照をする方法について紹介します。

キーの一覧を参照する(.keys())

キーの一覧を参照するには『.keys()』を使います。


>>> a = ({'java':'A','python':'B'})
>>> a.keys()
['python', 'java']

 

値の一覧を参照する(.values())

値の一覧を参照するには『.values()』を使います。


>>> a = ({'java':'A','python':'B'})
>>> a.values()
['B', 'A']

 辞書の値を更新する

辞書の値を更新する方法として2つあります。

直接キーを指定して更新する(辞書[キー]=値)

直接キーを指定して更新するには『辞書[キー]=値』を記述します。対応するキーの値を指定した値に対応します。該当するキーがない場合は、指定したキーを指定した値をペアとしてデータを新たに追加します。


>>> a = ({'java':'A','python':'B'})
>>> a['java'] = 'C++'
>>> a
{'python': 'B', 'java': 'C++'

 

新規にキーと値のペアを追加する(.setdefault(キー,初期値))

新規にキーと値のペアを追加するには『.setdefault(キー,初期値)』を使います。初期値に何も指定しなければ、「None」を返します。また、既に指定したキーが存在していれば、その値を返し、存在していなければペアを登録後、指定した値を返します。


>>> a = ({'java':'A','python':'B'})
>>> a.setdefault('C++','C')
'C'
>>> a
{'python': 'B', 'java': 'A', 'C++': 'C

 

辞書の値を削除する

辞書の値を削除するには「直接キーを指定する」方法と「キーを指定し一度取り出してから削除」方法があります。

直接キーを指定して削除する(del 辞書[キー])

直接キーを指定して値を削除するには『del 辞書[キー]』を使います。指定したキーに対応する値が削除されます。


>>> a = ({'java':'A','python':'B'})
>>> del a['java']
>>> a
{'python': 'B'}

 

キーを指定し一度値を取り出してから削除する(.pop(キー,初期値)と.popitem())

これは指定したキーに対応する値を出力し、必要であれば後処理で使えるが、不要であれば辞書に戻さずそのままメモリ上から削除します。値のみを一度取り出し削除するには『.pop(キー,初期値)』を使います。存在しないキーを指定した場合は「KeyError」が出ますが、初期値を指定していればその値が返ってきます。


>>> a = ({'java':'A','python':'B'})
>>> a.pop('java')
'A'
>>> a
{'python': 'B'}

また、辞書が空になるまでキーと値のペアをタプル型で取り出す.popitem()』があります。


>>> a = ({'java':'A','python':'B'})
>>> a.popitem()
('python', 'B')
>>> a.popitem()
('java', 'A')
>>> a
{}

 

よくつかうもの

最後に辞書でよく使うものを以下に列挙しました。

指定したキーが辞書にあるかを調べる(キー in 辞書)

辞書の中に指定したキーがあるかを調べるには『キー in 辞書』で記述します。含まれていれば「True」、含まれていなければ「False」を返します。


>>> a = ({'java':'A','python':'B'})
>>> 'java' in a
True

 

辞書の長さを調べる(len(辞書))

これはリスト同様に『len(辞書)』を使って調べます。


>>> a = ({'java':'A','python':'B'})
>>> len(a)
2

 

辞書同士を結合する(結合先辞書A.update(結合元辞書B))

ここでの結合とは、辞書Aに辞書Bの情報を取り込むことを言います。具体的には辞書Aにも辞書Bにもあるキーと値のペアはそのままにし、辞書Aと辞書Bでキーは同じだが、値が異なれば上書きます。辞書Aにそもそも指定したキーがない場合は新規にそのキーと値のペアを追加します。結合には『結合先辞書A.update(結合元辞書B)』を使います。結合元である辞書Bのデータ自体は消えません。また、結合元辞書Bは、「辞書を新しくつくる」で説明した、引数型やタプル型、リテラル型で引数を指定することも可能です。


>>> a = ({'java':'A','python':'B'})
>>> b = ({'java':'C','C++':'D'})
>>> b.update(a)
>>> b
{'python': 'B', 'java': 'A', 'C++': 'D'}

 

まとめ

辞書のきほん

・他のプログラミング言語でいうコレクション
・キーにはリストと辞書以外のオブジェクトなら大体OK
・値はどんな型でもOK

以上。