🦍

辞書からの取り出し keys(),values(),items()

2023/06/25に公開

今回はkeys(),values(),items()について解説します。

これらはpythonの辞書型の変数に対して使用される関数です。
以下例文です。
keys()

my_dict = {"apple": 1, "banana": 2, "cherry": 3}
keys = my_dict.keys()
print(keys) 
"dict_keys(['apple', 'banana', 'cherry'])"

values()

my_dict = {"apple": 1, "banana": 2, "cherry": 3}
values = my_dict.values()
print(values)
"dict_values([1, 2, 3])"

items()

my_dict = {"apple": 1, "banana": 2, "cherry": 3}
items = my_dict.items()
print(items)
"dict_items([('apple', 1), ('banana', 2), ('cherry', 3)])"

--
ここで注意したいのは、これらが返すdict_~という型はpythonのビューオブジェクトと呼ばれ、
通常のlistとは異なる性質を持ちます。
通常のリストとして扱いたいときは、list()で変換することができます。

ビューオブジェクトの性質

ここで、ビューオブジェクトの性質について説明します。

動的である:
ビューオブジェクトは辞書の現在の状態を反映します。つまり、ビューオブジェクトを作成した後に辞書の内容が変更されると、そのビューオブジェクトも更新されます。

反復可能:
ビューオブジェクトはイテラブル(反復可能)であり、forループなどで要素を一つずつ取り出すことができます。

my_dict = {"apple": 1, "banana": 2, "cherry": 3}
items = my_dict.items()
for key in keys:
    print(key)
"apple"
"banana"
"cherry"

メモリ効率が良い:
ビューオブジェクトは元の辞書のデータを参照しており、新しいデータを生成しないため、メモリへの負荷が小さいです。

リストと異なる点

インデクシング:
dict_keys, dict_values, dict_items オブジェクトはインデクシングをサポートしていません。
これは、keys[0]のような形でアクセスできないことを指します。

my_dict = {"apple": 1, "banana": 2, "cherry": 3}
items = my_dict.items()
print(items[0])
"TypeError!"
"'dict_keys' object is not subscriptable"

変更不可能:
ビューオブジェクトはイミュータブル(変更不可能)です。
そのため、要素の追加、削除、変更などができません。

my_dict = {"apple": 1, "banana": 2, "cherry": 3}
my_dict.items = {"banana": 1, "banana": 2, "banana": 3}
"AttributeError!"
"'dict' object attribute 'items' is read-only"

ビューオブジェクトの説明は以上です。
その特性から、辞書の内容を調べたり、辞書の内容を反復したい時に使用されます。

それでは今回はここまでです!最後まで読んでくださりありがとうございました!🦍

Discussion