Dictionary viewsは "集合的に類似したオブジェクト"なので、辞書の内容と他のオブジェクトとを比較することができます。具体的には、辞書と辞書とを比較すると
- キービュー:セット様
- 値-ビューは:設定状ではない
- アイテムビュー:(キー、値)ペアである場合に設定状ユニークでハッシュ可能です
キービューのセットに似た性質により、ビット単位の比較が可能です。 Python 3では、演算子&
を使用して交差を見つけることができます。
hex_ids = {'#b0a7aa': '9976', '#595f5b': '19367', '#9a8f6a': '24095'}
hex_ids.keys()
# dict_keys(['#595f5b', '#9a8f6a', '#b0a7aa'])
{'#c7ccc0', '#9a8f6a', '#8a8e3e'} & hex_ids.keys()
# {'#9a8f6a'}
奇妙なことに、list
及びキービューを比較することも可能である。
['#c7ccc0', '#9a8f6a', '#8a8e3e'] & hex_ids.keys()
# {'#9a8f6a'}
set
オブジェクト通常list
一方、このように比較することはできません。
['#c7ccc0', '#9a8f6a', '#8a8e3e'] & set(['#595f5b', '#9a8f6a', '#b0a7aa'])
# TypeError: unsupported operand type(s) for &: 'list' and 'set'
['#c7ccc0', '#9a8f6a', '#8a8e3e'] & {['#595f5b', '#9a8f6a', '#b0a7aa']}
# TypeError: unhashable type: 'list'
脇のように設定されているから、はなぜキー・ビューは、ビット演算子を使用してリストと比較することができますか? Pythonの3.5.2 | |のPython 3.4.4 |(viewkeys()
を使用して)Pythonの2.7.12 | IPython 5.0.0 |:でテスト