辞書からキーに対応した値を取得するには幾つかの方法がある。それらの方法と注意点を紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
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}
辞書から値を取得するには以下のような方法がある(ここでいう「値」とは、辞書に含まれるキーに対応する値のこと)。
以下では、これらについて簡単に見ていく。
辞書に対して角かっこにキーを指定することで、その値を取得できる。これはリストやタプルで角かっこの中にインデックスを指定して、そのインデックス位置にある値を取得するのに似ている。
以下に例を示す。
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(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メソッドは次のような構文になっている。
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}')
Copyright© Digital Advantage Corp. All Rights Reserved.