[Python入門]辞書:Python入門(3/4 ページ)
Pythonには「キーと値」の組を管理するためのデータ構造として「辞書」がある。その基本的な使い方とリストやタプルとの違いなどについて触れる。
辞書の操作
辞書からの項目の削除、全項目の削除、特定のキーの存在確認といった、辞書の操作はリストの操作と同様に行える。これらについては簡単にまとめておこう(以下の表の例では変数mydictに「{'foo': 'foo', 'bar': 'bar', 'baz': 'baz'}」という辞書が格納されているものとする)。
操作 | 方法 | 例 |
---|---|---|
辞書の項目数を取得する | len(辞書) | len(mydict)→3 |
辞書の項目を削除する | del 辞書[キー] | del mydict['foo'] |
指定したキーkeyが辞書に含まれているか | key in 辞書 | 'hoge' in mydict→False |
指定したキーkeyが辞書に含まれていないか | key not in 辞書 | 'hoge' not in mydict→True |
辞書の全項目を削除する | 辞書.clear() | mydict.clear() |
辞書をコピーする | 辞書.copy() | newdict = mydict.copy() 辞書の「浅いコピー」が行われる |
辞書の操作 |
注意する点としては、辞書を対象としてin演算子/not in演算子で存在確認を行う場合、指定した「キー」が辞書に含まれているかどうか(含まれていないかどうか)を調べるという点だ。辞書に特定の値が含まれているかどうかを知りたければ、後述するvaluesメソッドを使って、その戻り値に対してin演算子やnot in演算子を使用する。
上の表には示さなかったが、sorted関数に辞書を渡すことも可能だ。ただし、その場合には「辞書のキーを並べ替えたリスト」が返される点にも注意が必要だ。辞書そのものを反復可能オブジェクトとして何らかの操作を行う場合、基本的にはそのキーが反復する要素となる。
次に、辞書に特有の操作について簡単に見ていこう。
updateメソッドによる辞書の項目の変更
updateメソッドは、辞書に存在する項目を変更したり、辞書にない項目を追加したりといった操作を行える。
updateメソッド
update([iterable][, **kwarg])
パラメーター | 説明 |
---|---|
iterable | 辞書の内容を更新する値を含んだ反復可能オブジェクト(省略可能)。 iterableが辞書の場合は、iterableの内容が辞書に反映される(既存のキーについてはその値が変更され、新規のキーならその項目が追加される) 他の反復可能オブジェクトについては、その要素が「2つの要素を持つ反復可能オブジェクト」である必要がある。その場合、最初の要素がキーとして、次の要素がその値として見なされて、辞書の内容が更新される。 |
**kwarg | 「キー=値」形式のキーワード引数を任意の数だけ指定できる。この場合、「キー」が辞書のキーとして、「値」がその値として使われて、辞書の内容が更新される |
updateメソッドのパラメーター |
以下にupdateメソッドの使用例を示す。
mydict = {'foo': 'FOO', 'bar': 'BAR', 'baz': 'BAZ'}
print(mydict) # 元の辞書
mydict.update(foo='fooo', somekey='somevalue') # キーワード引数による辞書の更新
print(mydict)
mydict.update({'bar': 'new BAR'}) # 辞書による辞書の更新
print(mydict)
mydict.update([('baz', 'new Baz'), ['x', 1]]) # リストによる辞書の更新
print(mydict)
mydict.update([('y', 2)], z=3) # 両者の組み合わせ
print(mydict)
以下に実行例を示す。上のコードと照らし合わせながら、辞書の更新結果を確認してほしい。
popメソッドによる値の取得
popメソッドは、指定したキーに関連付けられている値を得ると共に、そのキーと値の組を辞書から削除する。
popメソッド
pop(key[, default])
指定したkeyの値を取得し、その項目を辞書から削除する。指定したkeyが辞書にないときには、defaultに指定した値が返される。指定したkeyが辞書になく、defaultも指定していないときにはエラー(例外)が発生する。
パラメーター | 説明 |
---|---|
key | その値を取得したいキー |
default | キーが辞書になかったときに返されるデフォルト値(省略可能)。省略した場合に、指定してkeyが辞書になければエラー(例外)が発生する |
popメソッドのパラメーター |
popメソッドは、値の取得と削除を同時に行うのが、これまでに見てきた方法とは異なる点だ。以下に例を示す。
mydict = {'foo': 'foo', 'bar': 'bar', 'baz': 'baz'}
print(mydict)
result = mydict.pop('bar') # キー'bar'に対応する項目を削除
print(result) # 削除した項目が戻り値になる
result = mydict.pop('bar', 'not found') # デフォルト値を指定
print(result) # キー'bar'はないので、デフォルト値が戻り値になっている
result = mydict.pop('bar') # キー'bar'はもう存在しないのでエラー
以下に実行結果を示す。デフォルト値を指定すると、キーが存在しない場合にはそれが戻り値となることと、デフォルト値を指定していないときには、キーが存在しなければエラーとなることに注目しよう。
popitemメソッドによる項目の取得と削除
popitemメソッドは、辞書に登録されている項目の中から1つを削除して、そのキーと値の組(タプル)を戻り値とするものだ。
以下に例を示す。
mydict = {'foo': 'foo', 'bar': 'bar', 'baz': 'baz'}
print(mydict.popitem())
print(mydict.popitem())
print(mydict.popitem())
print(mydict.popitem())
Python 3.7で、辞書に追加された項目(キーと値の組)の追加順序が内部で保存されることが言語仕様であるとアナウンスされた。そして、Python 3.7以降では、popitemメソッドを呼び出すと、辞書に追加したのとは逆の順序(Last In First Out、LIFO:後入れ先出し)で項目が取り出されるようになっている。Python 3.6までのバージョンではこのように動作することは保証されていないので注意が必要だ(Python 3.6では実装詳細となっているが、公式な仕様とはなっていない)。
以下に例を示す。辞書に項目がなければエラーとなる点に注目しよう。
setdefaultメソッドによる項目の存在確認と追加
辞書のsetdefaultメソッドは、特定のキーの値を取得することもできるが、値を取得するためのメソッドというよりは辞書に特定のキーに関連付けられた値があるかどうかの存在確認を行い、あればその値を戻り値として、なければキーと値の組を新規に辞書に追加するものだ。
setdefaultメソッド
setdefault(key[, default])
辞書にkeyが存在すれば、そのキーの値を返す。なければ、keyとdefaultに指定した値の組を辞書に追加する(追加時には追加した値が戻り値となる)。defaultを省略した場合はNoneが指定されたものと見なされる。
パラメーター | 説明 |
---|---|
key | 辞書に存在するかどうかを調べたいキー |
default | 辞書にキーが存在しなかったときに、追加する値(省略可能)。省略時にはNoneが指定されたものと見なされる |
setdefaultメソッドのパラメーター |
以下に例を示す。
mydict = {'foo': 'foo', 'bar': 'bar'}
print(mydict.setdefault('foo')) # 存在するキーを指定すれば、その値が返される
print(mydict.setdefault('baz', 'baz')) # 存在しないキーを指定
print(mydict)
実行結果を以下に示す。2番目のsetdefaultメソッド呼び出しで「'baz': 'baz'」という項目が追加されたことを確認してほしい。
Copyright© Digital Advantage Corp. All Rights Reserved.