dict.items()和dict.iteritems()之间有什么适用的区别吗?
来自Python文档:
dict.items():返回字典的(键,值)对列表的副本。
dict.iteritems():返回字典(key, value)对上的迭代器。
如果我运行下面的代码,每一个似乎都返回一个对相同对象的引用。有没有什么细微的差别是我没有注意到的?
#!/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
在Py2.x
命令dict.items()、dict.keys()和dict.values()返回字典的(k, v)对、键和值列表的副本。
如果复制的列表非常大,这可能会占用大量内存。
命令dict.iteritems()、dict.iterkeys()和dict.itervalues()返回一个遍历字典(k, v)对、键和值的迭代器。
命令dict.viewitems(), dict.viewkeys()和dict.viewvalues()返回视图对象,可以反映字典的变化。
(也就是说,如果你删除一个项或在字典中添加一个(k,v)对,视图对象可以同时自动更改。)
$ 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()可用,它们像Py2中的dict.viewitems()一样返回视图对象。x。
But
正如@lvc所指出的,viewobject和iterator不一样,所以如果你想在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'>
在Py2.x
命令dict.items()、dict.keys()和dict.values()返回字典的(k, v)对、键和值列表的副本。
如果复制的列表非常大,这可能会占用大量内存。
命令dict.iteritems()、dict.iterkeys()和dict.itervalues()返回一个遍历字典(k, v)对、键和值的迭代器。
命令dict.viewitems(), dict.viewkeys()和dict.viewvalues()返回视图对象,可以反映字典的变化。
(也就是说,如果你删除一个项或在字典中添加一个(k,v)对,视图对象可以同时自动更改。)
$ 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()可用,它们像Py2中的dict.viewitems()一样返回视图对象。x。
But
正如@lvc所指出的,viewobject和iterator不一样,所以如果你想在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'>
Dict.iteritems():提供一个迭代器。可以在循环之外的其他模式中使用迭代器。
student = {"name": "Daniel", "student_id": 2222}
for key,value in student.items():
print(key,value)
('student_id', 2222)
('name', 'Daniel')
for key,value in student.iteritems():
print(key,value)
('student_id', 2222)
('name', 'Daniel')
studentIterator = student.iteritems()
print(studentIterator.next())
('student_id', 2222)
print(studentIterator.next())
('name', 'Daniel')