[解決!Python]辞書の要素を取得するには解決!Python

辞書からキーに対応した値を取得するには幾つかの方法がある。それらの方法と注意点を紹介する。

» 2023年03月28日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

d = {'key0': 0, 'key1': 1}

# 辞書から値を取得
# キーを指定
val = d['key0']
print(val)  # 0

# 存在しないキーを指定すると例外
val = d['key100'# KeyError

# 例外を発生させずに値を取得するにはgetメソッドを使う
val = d.get('key0', 'not found')
print(val)  # 0

val = d.get('key100', 'not found'# OK
print(val)  # not found

# popメソッドは引数に指定したキーの値を取得して、そのキー/値を辞書から削除
val = d.pop('key1')
print(val)  # 1
print(d)  # {'key0': 0}

# popメソッドで存在しないキーを指定した場合
val = d.pop('key100'# KeyError

val = d.pop('key100', 'not found')
print(val)  # not found

# popitemメソッドは辞書の末尾からキー/値の組を戻し、それを辞書から削除
d = {'foo': 0, 'bar': 1, 'baz': 2}
print(d)  # {'foo': 0, 'bar': 1, 'baz': 2}

k, v = d.popitem()
print(f'key: {k}, val: {v}'# key: baz, val: 2
print(d)  # {'foo': 0, 'bar': 1}


辞書から値を取得する方法

 辞書から値を取得するには以下のような方法がある(ここでいう「値」とは、辞書に含まれるキーに対応する値のこと)。

  • 辞書に対して角かっこ「[]」でキーを囲む
  • getメソッドの引数にキーを指定する
  • popメソッドの引数にキーを指定する(対応するキー/値は辞書から削除される)
  • popitemメソッドで辞書の末尾要素のキーと値を取得する(末尾要素は辞書から削除される)

 以下では、これらについて簡単に見ていく。

角かっこにキーを指定

 辞書に対して角かっこにキーを指定することで、その値を取得できる。これはリストやタプルで角かっこの中にインデックスを指定して、そのインデックス位置にある値を取得するのに似ている。

 以下に例を示す。

d = {'key0': 0, 'key1': 1}

val = d['key0']
print(val)  # 0


 この例では辞書dには'key0'と整数0、'key1'と整数1という2つのキー/値の組が含まれている。そして、辞書dに対して「d['key0']」のように角かっこで囲んでキー'key0'を指定すると、その値である整数0が得られている。

 これは辞書からキーに関連付けられた値を取得する最も一般的な方法といえる。ただし、注意点がある。それは存在しないキーを指定すると例外が発生することだ。以下に例を示す。

val = d['key100'# KeyError


 これに対して、次に紹介するgetメソッドでは存在しないキーを指定した場合にも例外を発生させない。

getメソッドの引数にキーを指定

 getメソッドの構文は次のようになっている。

get(key[, default])


 keyには取得したい要素のキーを指定する。defaultは指定したキーが存在しなかった場合にはgetメソッドが返す値を指定する。省略時にはNoneが指定されたものとされる。これにより、getメソッドでは指定したキーが辞書になくても、KeyError例外を発生させることなくdefaultの値が返送される。

 以下に例を示す(辞書dは先ほどと同様)。

val = d.get('key0', 'not found')
print(val)  # 0

val = d.get('key100', 'not found'# OK
print(val)  # not found


 最初の例では存在するキーである'key0'を指定しているい。そのため、その値である整数0が返されている。

 次の例では、存在しないキー'key100'を指定している。また、引数defaultには'not found'を指定している。よって、ここではgetメソッドの戻り値は'not found'になる。

 多くの場合は、ここまでに説明した2つの方法で辞書の値を取り出すが、popメソッドとpopitemメソッドでも辞書から値を取り出せる。

popメソッドとpopitemメソッド

 popメソッドとpopitemメソッドの特徴を以下に簡単にまとめる。

  • popメソッド:引数に指定したキーの値を戻り値とし、そのキー/値の組を辞書から削除する
  • popitemメソッド:辞書の末尾要素のキー/値の組を戻り値として、その組を辞書から削除する

 どちらのメソッドもキー/値の組を辞書から削除することには注意すること。

 また、popメソッドは次のような構文になっている。

pop(key[, default])


 getメソッドとは異なり、defaultを省略したときにはNoneが指定されたものとはならない点には注意が必要だ。つまり、defaultを指定しなかったときには、指定したキーが辞書に含まれていなければ、KeyError例外が発生する。指定したキーが存在すれば、その値が戻り値となる。

 以下に例を示す。

val = d.pop('key1')
print(val)  # 1
print(d)  # {'key0': 0}


 この例では存在するキーを指定している。よって、指定したキー'key1'に対応する値が返されていることと、辞書dからは対応する要素(キー/値の組)が削除されていることに注目されたい。

 存在しないキーを指定した場合の例を以下に示す。

val = d.pop('key100'# KeyError

val = d.pop('key100', 'not found')
print(val)  # not found


 defaultを指定するかしないかでpopメソッドの振る舞いが異なるので、popメソッドを使う場合には注意しよう。

 popitemメソッドは辞書の末尾からキー/値の組を戻し、それを辞書から削除する。引数はない。Python 3.7以降では、popitemメソッドは辞書に追加した順序とは逆順(LIFO:Last In First Out)でキー/値の組を取り出す。

 以下に例を示す。ここでは辞書には3つの要素が格納されている。

d = {'foo': 0, 'bar': 1, 'baz': 2}
print(d)  # {'foo': 0, 'bar': 1, 'baz': 2}

k, v = d.popitem()
print(f'key: {k}, val: {v}'# key: baz, val: 2
print(d)  # {'foo': 0, 'bar': 1}


 辞書dには3つの要素があり、最後の要素はキー'baz'と整数2の組となっている。この状態でpopitemメソッドを呼び出すとそれらが取り出されると同時に辞書から削除されていることが分かる。

 なお、popitemメソッドは辞書が格納する全ての要素について何らかの処理をしながら、最後に辞書を空にしたいといった場合に役立つ。典型的には次のようなコードになるだろう。

d = {'foo': 0, 'bar': 1, 'baz': 2}

while d:
    k, v = d.popitem()
    # k, vを使って何かする
    print(f'key: {k}, value: {v}')


「解決!Python」のインデックス

解決!Python

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。