字典视图“是类似集合的对象”,因此可用于将字典内容与其他对象进行比较。具体来说,
- key-views : 类似集合
- value-views : 不像集合
- item-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'}
奇怪的是,比较 alist
和 key-view 也是可能的:
['#c7ccc0', '#9a8f6a', '#8a8e3e'] & hex_ids.keys()
# {'#9a8f6a'}
而list
和set
对象通常不能以这种方式进行比较。
['#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|Python 2.7.12(使用viewkeys()
)|IPython 5.0.0|