ディクショナリビューオブジェクトとは何ですか? 質問する

ディクショナリビューオブジェクトとは何ですか? 質問する

Python 2.7では、辞書表示方法利用可能。

今、私は以下の長所と短所を知っています。

  • dict.items()(そしてvalueskeys): リストを返すので、実際に結果を保存することができ、
  • dict.iteritems()(など): ジェネレーターを返すので、生成された各値を 1 つずつ反復処理できます。

(および類似のもの)は何dict.viewitems()のためにあるのでしょうか? その利点は何でしょうか? どのように機能するのでしょうか? 結局のところ、ビューとは何でしょうか?

ビューは常に辞書の変更を反映していると読みました。しかし、パフォーマンスとメモリの観点からはどのように動作するのでしょうか? 長所と短所は何ですか?

ベストアンサー1

辞書ビューは、基本的にその名前の通りです。景色は窓のようなもの辞書のキーと値(または項目)に関するものです。以下は公式文書Python 3の場合:

>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
>>> keys = dishes.keys()
>>> values = dishes.values()

>>> # view objects are dynamic and reflect dict changes
>>> del dishes['eggs']
>>> keys  # No eggs anymore!
dict_keys(['sausage', 'bacon', 'spam'])

>>> values  # No eggs value (2) anymore!
dict_values([1, 1, 500])

(Python 2 の同等のものはdishes.viewkeys()および を使用しますdishes.viewvalues()。)

この例では、視点のダイナミックな特徴: キービューはない特定の時点のキーのコピーではなく、キーを表示する単純なウィンドウです。キーが変更されると、ウィンドウに表示される内容も変更されます。この機能は、状況によっては便利です (たとえば、キーが必要になるたびに現在のキーのリストを再計算するのではなく、プログラムの複数の部分でキーのビューを操作できます)。ビューを反復処理しているときに辞書のキーが変更された場合、反復子の動作が明確に定義されていないため、エラーにつながる

一つの利点は見ている例えば、キーは少量かつ固定量のメモリそして、少量かつ固定のプロセッサ時間キーのリストが作成されないからです (一方、Python 2 では、Rajendran T が引用しているように、リストの長さに比例した量のメモリと時間を消費する新しいリストが不必要に作成されることがよくあります)。窓の例えを続けると、壁の後ろの風景を見たい場合、壁に開口部を作る (窓を作る) だけです。キーをリストにコピーすることは、代わりに壁に風景のコピーを描くことに相当します。コピーには時間とスペースがかかり、更新もされません。

まとめると、ビューとは、辞書のビュー(ウィンドウ)のことで、辞書の内容が変更された後もその内容を表示します。ビューはリストとは異なる機能を提供します。キーのリストには、コピー一方、ビューは動的であり、作成するためにデータ (キーまたは値) をコピーする必要がないため、取得がはるかに高速です。

おすすめ記事