字典实战——在python 3.x 和 2.7 中的字典改变——字典视图和sets | 第二部分 类型与操作 —— 第 8 章: 列表和字典 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-江南app体育官方入口

未匹配的标注

也不像 2.x列表结果,被keys方法返回的3.x视图对象是类set的,且支持如交集和并集等常用集合操作;values视图不是类set的,但如果items(key,value)对是独特且可哈希的(不可变的),则其结果是类set的。考虑到sets表现得很像无值的字典(且在3.x和2.7中甚至可能被编码在像字典的花括号中),这是一个逻辑的对称性。根据第5章,set项是无序的、独立的和不可变的,就像字典键一样。

下面是当用在集合操作(从前一节的会话开始)中时, keys视图看起来的样子;字典的值视图从不是类set的,因为它们的项目不一定独特或不可变:

>>> k, v
(dict_keys(['c', 'a']), dict_values([3, 1]))
>>> k | {'x': 4} # keys (and some items) views are set-like
{'c', 'x', 'a'}
>>> v & {'x': 4}
typeerror: unsupported operand type(s) for &: 'dict_values' and 'dict'
>>> v & {'x': 4}.values()
typeerror: unsupported operand type(s) for &: 'dict_values' and
'dict_values'

在set操作中,视图可能和其它视图、sets和字典混合;字典在这个上下文中的处理方式和它们的键视图一样:

>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> d.keys() & d.keys() # intersect keys views
{'b', 'c', 'a'}
>>> d.keys() & {'b'} # intersect keys and set
{'b'}
>>> d.keys() & {'b': 1} # intersect keys and dict
{'b'}
>>> d.keys() | {'b', 'c', 'd'} # union keys and set
{'b', 'c', 'a', 'd'}

如果项目视图可以哈希,它们也是类set的——也就是说,如果它们只包含不可变的对象:

>>> d = {'a': 1}
>>> list(d.items()) # items set-like if hashable
[('a', 1)]
>>> d.items() | d.keys() # union view and view
{('a', 1), 'a'}
>>> d.items() | d # dict treated same as its keys
{('a', 1), 'a'}
>>> d.items() | {('c', 3), ('d', 4)} # set of key/value pairs
{('d', 4), ('a', 1), ('c', 3)}
>>> dict(d.items() | {('c', 3), ('d', 4)}) # dict accepts iterable sets too
{'c': 3, 'a': 1, 'd': 4}

如果需要关于这些操作的复习,请参阅第5章的sets操作的讲述。这里,让我们使用3.x字典其它三个快速编码说明来完成。

本文章首发在 江南app体育官方入口 网站上。

上一篇 下一篇
讨论数量: 0



暂无话题~
网站地图