dictionary - dict.items( ) 和dict.iteritems( ) 之间的区别是什么 ?

dict.items()和dict.iteritems()之间有没有区别?

python文档:

dict.items() :返回(键,值)对字典列表的副本。

dict.iteritems() :在(字典键,值)对返回迭代器。

是否有什么细微的差别?


#!/usr/bin/python

d={1:'one',2:'two',3:'three'}
print 'd.items():'
for k,v in d.items():
 if d[k] is v: print 'tthey are the same object' 
 else: print 'tthey are different'

print 'd.iteritems():' 
for k,v in d.iteritems():
 if d[k] is v: print 'tthey are the same object' 
 else: print 'tthey are different' 

输出:


d.items():
 they are the same object
 they are the same object
 they are the same object
d.iteritems():
 they are the same object
 they are the same object
 they are the same object

时间:

这是进化的一部分。

最初,python items()建立了元组的真实列表并返回,这可能需要大量的内存。

然后,将发生器引入到语言中,并将该方法作为一种名为iteritems()的迭代器生成器方法,原来的保留是为了向后兼容。

dict.items()返回一个2-tuples列表( [(key, value), (key, value), ...]),而dict.iteritems()是生成2-tuples的生成器,前者最初占用了更多的空间和时间,但是访问每个元素很快,而第二个要花更少的时间。

在Py2.x中

命令dict.items(),dict.keys()和dict.values()返回(k, v)对的字典列表的副本,键和值,如果复制的列表非常大,这可能需要大量的内存。

在字典对,键和值的(k, v)上,命令dict.iteritems()dict.iterkeys()dict.itervalues()返回一个迭代器。

命令的dict.viewitems()dict.viewkeys()dict.viewvalues()返回 查看对象 可以反映字典的变化。 (例如,如果你在字典中添加一个项或添加一对对,则视图对象可以同时更改),


$ python2.7

>>> d = {'one':1, 'two':2}
>>> type(d.items())
<type 'list'>
>>> type(d.keys())
<type 'list'>
>>> 
>>> 
>>> type(d.iteritems())
<type 'dictionary-itemiterator'>
>>> type(d.iterkeys())
<type 'dictionary-keyiterator'>
>>> 
>>> 
>>> type(d.viewitems())
<type 'dict_items'>
>>> type(d.viewkeys())
<type 'dict_keys'>


在Py3.x中

在Py3.x中,事情更加清晰,因为只有dict.items()dict.keys()dict.values()可以用来返回视图对象的dict.viewitems()

但是

view对象与迭代器不同,因此如果要在Py3.x中返回迭代器,则可以使用iter(dictview) :


$ python3.3

>>> d = {'one':'1', 'two':'2'}
>>> type(d.items())
<class 'dict_items'>
>>>
>>> type(d.keys())
<class 'dict_keys'>
>>>
>>>
>>> ii = iter(d.items())
>>> type(ii)
<class 'dict_itemiterator'>
>>>
>>> ik = iter(d.keys())
>>> type(ik)
<class 'dict_keyiterator'>

...