Pythonの辞書(ディクショナリ)ビューオブジェクトとは?items()・keys()・values()の使い方を解説
Pythonの辞書(dict)には、items()、keys()、values() という3つの便利なメソッドが用意されています。これらのメソッドは、いずれも「ビューオブジェクト(view object)」と呼ばれる特殊なオブジェクトを返します。ビューオブジェクトは辞書の中身を動的に参照できるため、forループでの反復処理や要素の確認などに広く活用されています。
items() メソッド:キーと値のペアを取得する
items() メソッドは、辞書内のすべてのキーと値のペアを格納した dict_items オブジェクトを返します。各要素はタプル形式(キー, 値)で表されます。
>>> D1={"pen":25, "pencil":10, "book":100, "sharpner":5, "eraser":5}
>>> i=D1.items()
>>> i
dict_items([('pen', 25), ('pencil', 10), ('book', 100), ('sharpner', 5), ('eraser', 5)])keys() メソッド:すべてのキーを取得する
keys() メソッドは、辞書に含まれるすべてのキーの一覧を保持する dict_keys 型のビューオブジェクトを返します。
>>> k=D1.keys() >>> k dict_keys(['pen', 'pencil', 'book', 'sharpner', 'eraser'])
values() メソッド:すべての値を取得する
同様に、values() メソッドは辞書内のすべての値を格納した dict_values オブジェクトを返します。
>>> v=D1.values() >>> v dict_values([25, 10, 100, 5, 5])
ビューオブジェクトは動的に更新される
ビューオブジェクトの重要な特徴は、元の辞書と連動して動的に更新されるという点です。辞書本体に変更を加えると、その内容が即座にビューにも反映されます。たとえば、辞書から「book」キーを削除すると、それぞれのビューオブジェクトからも該当するエントリが消えます。
>>> del D1['book']
>>> k
dict_keys(['pen', 'pencil', 'sharpner', 'eraser'])
>>> i
dict_items([('pen', 25), ('pencil', 10), ('sharpner', 5), ('eraser', 5)])
>>> v
dict_values([25, 10, 5, 5])ビューオブジェクトの主な特徴
- 反復処理が可能: for文を使って直接ループできます。
- 動的な参照: 元の辞書の変更が常に反映され、最新の状態を保ちます。
- メンバーシップテスト対応:
in演算子で特定のキーや値が存在するかを高速に判定できます。 - サイズの取得:
len()関数で現在の要素数を取得できます。
このように、辞書のビューオブジェクトは軽量かつ効率的にデータへアクセスできる仕組みであり、実務的なPythonコードを書くうえで欠かせない概念です。
-
Pythonの関数はオブジェクトなのか?属性を持たせる方法を解説
Pythonの関数はオブジェクトである結論から言うと、Pythonの関数は完全なオブジェクトです。def文やlambda式を使うと、Pythonは自動的に関数オブジェクトを生成します。通常のオブジェクトと同様に、関数にも属性(アトリビュート)を持たせたり、後から参照したりすることができます。さらに、関数の中にはデータ変数だけでなく、別の関数を定義することも可能です。サンプルコード以下の例では、def文で作成した関数に「score」という属性を代入し、その値を取得しています。また、lambda式で生成したオブジェクトの型も確認しています。def foo(): pass foo.score = 2
-
Pythonの関数属性とは?getattr・setattrを使った属性の設定と取得方法を解説
Pythonでは「すべてがオブジェクト」という設計思想のもと、ほぼすべてのデータに属性やメソッドが備わっています。実は関数もオブジェクトであり、他のオブジェクトと同じように属性(アトリビュート)を持つことができます。すべての関数には、組み込み属性として __doc__ が用意されています。これは関数のソースコード内に定義されたドキュメント文字列(docstring)を返す属性です。さらに、Pythonでは既存の属性を参照するだけでなく、関数に対して新しい属性を自由に追加し、後からその値を取得することも可能です。属性を操作するための組み込み関数:getattr と setattr属性の扱いには、