検索
連載

[Python入門]辞書Python入門(2/4 ページ)

Pythonには「キーと値」の組を管理するためのデータ構造として「辞書」がある。その基本的な使い方とリストやタプルとの違いなどについて触れる。

Share
Tweet
LINE
Hatena

辞書の内包表記

 リストでは内包表記と呼ばれる記法を使って、その要素を定義できた。同様に、辞書にも内包表記がある。

辞書内包表記

{キーの算出式: その値を算出する式 for ループ変数 in 反復可能オブジェクト}



 以下に辞書内包表記を使って辞書を定義する例を示す。

urls = ['https://someurl1', 'https://someurl2', 'https://someurls3']
pvs = [12345, 123456, 1234567]
authors = ['kawasaki', 'isshiki', 'endo']

pv_data = {u: {'pv': p, 'author': a} for u, p, a in zip(urls, pvs, authors)}
for key, value in pv_data.items():
    print(key, value['pv'], value['author'])

辞書内包表記の例

 これは3つのリストに格納されているURL、ページビュー、筆者をzip関数でひとまとめのタプルにしてから、それを辞書に項目として登録するコード例だ。以下に実行結果を示す。

実行結果
実行結果

辞書の要素の取り出し

 辞書から要素を取り出す方法には幾つかある。

  • 角かっこ「[]」にキーを指定する
  • getメソッドを使う
  • popメソッドを使う
  • popitemメソッドを使う

 これらの方法のうち、ここでは基本的な2つの方法を紹介する(popメソッドとpopitemメソッドについては後述する)。

角かっこによる辞書の値の取得

 辞書からあるキーに関連付けられている値を取り出す最も一般的な方法は、辞書に角かっこ「[]」を付け、その中にキーを指定するものだ。以下に例を示す。

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
print(sk['first_name'])

キーに'first_name'を指定して、その値を取り出す

 実行結果を以下に示す。

キー'first_name'の値が取り出された
キー'first_name'の値が取り出された

 Pythonのリストは整数値で要素をインデックス指定できる。これに対して、辞書は任意の型の値をキーとして、それを用いて要素をインデックス指定するものとも考えられる。ただし、リストやタプルとは異なり、辞書ではその要素をスライスすることはできない点には注意しよう(辞書ではスライスの開始位置/終了位置/差分を指定する方法がない)。

 このとき、存在しないキーを指定するとエラー(KeyError例外)が発生する。

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
print(sk['age'])  # 年齢はこのデータには含まれていない


存在しないキーを指定するとエラーとなる

 実行結果を以下に示す。

実行結果
実行結果

getメソッド

 getメソッドの引数にキーを与えて呼び出すことでも、そのキーの値を取得できる。角かっこ「[]」を使用したときとは異なり、こちらの方法では存在しないキーを指定してもエラー(例外)とはならない。

getメソッド

get(key[, default])


 keyに指定したキーの値を取得する。指定したキーがない場合には、defaultで指定したデフォルト値が返される(defaultを指定しなかった場合には、Noneが返される)。

パラメーター 説明
key その値を取得したいキー
default キーが辞書になかったときに返されるデフォルト値(省略可能)。省略した場合にはNoneが指定されたものと見なされる
getメソッドのパラメーター


 以下にgetメソッドの使用例を示す。getメソッドでは指定したキーが辞書にないときでもエラーとならないことを確認してみよう。

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
print(sk.get('first_name'))  # 存在するキーを指定
print(sk.get('age'))         # 存在しないキーを指定
print(sk.get('age', 'not found'))  # 存在しないキーと、デフォルト値を指定

getメソッドの使用例

 実行例を以下に示す。2つ目のgetメソッド呼び出しではデフォルト値を指定していないのでNoneが返されていることと、3つ目の呼び出しではデフォルト値を指定しているのでそれが返されていることに注目しよう。

getメソッドでは存在しないキーを指定してもエラーにならない
getメソッドでは存在しないキーを指定してもエラーにならない

 辞書から値を取り出すにはpopメソッドとpopitemメソッドも使えるが、これらについては「辞書の操作」で取り上げよう。

辞書の項目の変更と追加

 辞書の要素の値は角かっこ「辞書[キー] = 新しい値」のように、角かっこ「[]」にキーを指定したものへ新しい値を代入することで変更できる。

sk['family_name'] = 'okazaki'
print(sk)

辞書の項目の変更

 これはリストの要素の値を変更するのと同様だ。辞書にないキーを指定した場合には、そのキーと値の組が辞書に追加される。例えば、以下は辞書skにキー「'age'」と値「150」の組を追加するコードだ。

sk['age'] = 150
print(sk)

辞書への項目の追加

 ただし、+演算子による辞書同士の加算などはサポートされていない。

# どちらもエラー(TypeError例外)となる
sk = sk + {'height': 220}
sk += {'height': 220}

辞書同士の加算はできない

 以下に実行結果を示す。

実行結果
実行結果

 辞書の項目を変更したり、辞書に項目を追加したりする一番簡単な方法はこれだが、この他にも幾つかの方法がある。これらについては以下の「辞書の操作」で取り上げる。

Copyright© Digital Advantage Corp. All Rights Reserved.

[an error occurred while processing this directive]
ページトップに戻る