如果进入shell:
print type(dct.viewkeys())
它会返回:
<type 'dict_keys'>
dict_keys 是一个 Dictionary view 对象,是 Python 2.7 中的新对象。
来自 PEP 3106:
字典方法 keys()、values() 和 items() 在 Python 3.x 中有所不同。它们返回一个称为视图的对象,而不是完全具体化的列表。
在 Python 2.7 中无法更改 keys()、values() 和 items() 的返回值,因为太多代码会中断。相反,3.x 版本以新名称 viewkeys()、viewvalues() 和 viewitems() 添加。
>>>
>>> d = dict((i*10, chr(65+i)) for i in range(26))
>>> d
{0: 'A', 130: 'N', 10: 'B', 140: 'O', 20: ..., 250: 'Z'}
>>> d.viewkeys()
dict_keys([0, 130, 10, 140, 20, 150, 30, ..., 250])
视图是可迭代的,但键和项目视图的行为也类似于集合; & 执行交集,并且 |执行联合:
>>>
>>> d1 = dict((i*10, chr(65+i)) for i in range(26))
>>> d2 = dict((i**.5, i) for i in range(1000))
>>> d1.viewkeys() & d2.viewkeys()
set([0.0, 10.0, 20.0, 30.0])
>>> d1.viewkeys() | range(0, 30)
set([0, 1, 130, 3, 4, 5, 6, ..., 120, 250])
视图会跟踪字典,并且它的内容会随着字典的修改而变化:
>>>
>>> vk = d.viewkeys()
>>> vk
dict_keys([0, 130, 10, ..., 250])
>>> d[260] = '&'
>>> vk
dict_keys([0, 130, 260, 10, ..., 250])
但是,请注意,您无法在迭代视图时添加或删除键:
>>>
>>> for k in vk:
... d[k*2] = k
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration