注: python3のコード例ですが、質問はpython2も表しています( などに置き換え.keys
て.viewkeys
)
dict
オブジェクトは、(場合によっては) セット操作をサポートするビュー メソッドを提供します。
>>> {'a': 0, 'b': 1}.keys() & {'a'}
{'a'}
>>> {'a': 0, 'b': 1}.items() & {('a', 0)}
{('a', 0)}
ただし、値ビューは集合演算子をサポートしていません:
>>> {'a': 0, 'b': 1}.values() & {0}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'dict_values' and 'set'
dict 値はハッシュ不可能なオブジェクトになる可能性があることを理解しています。そのため、値のセットを作成することは常に可能であるとは限りませんが、同じことが にも当てはまります。dict.items
ここでは、セット操作は実行時にのみ失敗します。.items
dictを入力しますが、 set 操作.values
はすぐに失敗します。
ドキュメントでは、エントリは一般に一意ではないため、 Values ビューは set-like として扱われないと述べていますが、これは説得力のある理由ではないよう{0, 0, 1, 2}
です。
この行動の矛盾の本当の理由は何ですか?