[解決!Python]辞書のキーや値を反復したり、特定のキーや値が含まれているかを確認したりするには解決!Python

辞書のkeys/values/itemsメソッドを使ってビューオブジェクトを取得して、キーや値、それらの組を反復したり、特定のキーや値が辞書に含まれているかを確認したりする方法を紹介する。

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

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

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

連載目次

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

# キーを反復
keys = d.keys()
print(keys)  # dict_keys(['key0', 'key1', 'key2'])

for key in keys:
    print(key)  # 'key0'、'key1'、'key2'が反復される

# 値を反復
values = d.values()
print(values)  # dict_values([0, 1, 2])

for value in values:
    print(value)  # 0、1、2が反復される

# キーと値を反復
items = d.items()
print(items)  # dict_items([('key0', 0), ('key1', 1), ('key2', 2)])

for key, value in items:
    print(key, ':', value)  # 「key0 : 0」「key1 : 1」「key2 : 2」

# キーの存在確認
existence = 'key4' in d.keys()
print(existence)  # False

existence = 'key1' in d
print(existence)  # True

# 値の存在確認
existence = 0 in d.values()
print(existence)  # True

existence = 0 in d
print(existence)  # False

# キー/値の組の存在確認
existence = ('key0', 0) in d.items()
print(existence)  # True

existence = ('key0', 1) in d.items()
print(existence)  # False

# ビューオブジェクトは動的
keys = d.keys()
print(keys)  # dict_keys(['key0', 'key1', 'key2'])

d['key3'] = 3
print(keys)  # dict_keys(['key0', 'key1', 'key2', 'key3'])

# キーは集合的な演算も可能
d2 = {'key0': 0, 'key1': 1, 'key2': 2}
print(d2)  # {'key0': 0, 'key1': 1, 'key2': 2}
keys2 = d2.keys()
print(keys2)  # dict_keys(['key0', 'key1', 'key2'])
print(keys)  # dict_keys(['key0', 'key1', 'key2', 'key3'])

result = keys > keys2  # keysはkey2を包含している
print(result)  # True

result = keys ^ keys2  # keysとkeys2の対象差を計算
print(result)  # {'keys3'}

result = d > d2  # TypeError
result = d ^ d2  # TypeError


辞書のキーや値を反復するには

 辞書からは「辞書ビューオブジェクト」と呼ばれるオブジェクトを取得できる。これらを使って、キー/値/キーと値を要素とするタプルを反復できる。辞書ビューオブジェクトを得るには以下のメソッドを呼び出す。

  • dict.keysメソッド:キーのビューを取得する
  • dict.valuesメソッド:値のビューを取得する
  • dict.itemsメソッド:キーと値のビューを取得する(ビューの要素は(キー, 値)というタプルになる)

 取得したビューを使うと、上記メソッドで得られる要素(キー、値、それらを要素とするタプル)を反復したり、存在確認をしたりできる。

キーや値の反復

 キーや値、それらを要素とするタプルを反復するには、上で述べた通り、keys/values/itemsメソッドを使用する。以下に例を示す。

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

# キーを反復
keys = d.keys()
print(keys)  # dict_keys(['key0', 'key1', 'key2'])

for key in keys:
    print(key)  # 'key0'、'key1'、'key2'が反復される


 この例ではkeysメソッドを用いて、キーのビューオブジェクトを取得している(dict_keysオブジェクト)。反復処理をサポートしているので、後はfor文でその値(キー)を取り出すだけだ。なお、インデックスやスライスによる特定要素の取り出しはサポートされない。

 値やキー/値のタプルの反復についても同様だ。以下に例を示す。

# 値を反復
values = d.values()
print(values)  # dict_values([0, 1, 2])

for value in values:
    print(value)  # 0、1、2が反復される

# キーと値を反復
items = d.items()
print(items)  # dict_items([('key0', 0), ('key1', 1), ('key2', 2)])

for key, value in items:
    print(key, ':', value)  # 「key0 : 0」「key1 : 1」「key2 : 2」


 itemsメソッドでは「(キー, 値)」というタプルの形で辞書の要素が格納されることは覚えておこう。

キーや値の存在確認

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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