Python中的dict

dict的items()与iteritems()

注意:在 python3 中不存在 iteritems 属性,只有 items 属性,并且返回的是列 表,如果需要其返回迭代器那么,需要显示转换 iter(d.items())

In [3]: d={1:'one',2:'two',3:'three'}

In [4]: d.items()
Out[4]: [(1, 'one'), (2, 'two'), (3, 'three')]

In [5]: d.iteritems()
Out[5]: 

In [6]: a = d.iteritems()

In [7]: next(a)
Out[7]: (1, 'one')

In [8]: for i in a:
   ...:     print i
   ...:
(2, 'two')
(3, 'three')

In [9]: next(a)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
 in ()
----> 1 next(a)

StopIteration:

iteritems()返回的是一个迭代器,可以使用next()、for来遍历

关于迭代器:

首先要分别出可迭代对象和迭代器

以直接作用于 for 循环的数据类型有以下几种:

一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;

一类是 generator ,包括生成器和带 yield 的generator function。

这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。

判断是否是可迭代对象

可以使用 isinstance() 判断一个对象是否是 Iterable 对象
而生成器不但可以作用于 for 循环,还可以被 next() 函数不断调用并返回下一个值,直到最后抛出 StopIteration 错误表示无法继续返回下一个值了。

In [1]: from collections import Iterable

In [2]: isinstance([],Iterable)
Out[2]: True

In [3]: isinstance({},Iterable)
Out[3]: True

In [4]: isinstance('abc',Iterable)
Out[4]: True

In [5]: isinstance((x for x in range(10)),Iterable)
Out[5]: True

In [6]: isinstance([x for x in range(10)],Iterable)
Out[6]: True

In [7]: isinstance(100,Iterable)
Out[7]: False

判断是否是迭代器

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

In [1]: from collections import Iterator

In [2]: isinstance([],Iterator)
Out[2]: False

In [3]: isinstance({},Iterator)
Out[3]: False

In [4]: isinstance('abc',Iterator)
Out[4]: False

In [5]: isinstance((x for x in range(10)),Iterator)
Out[5]: True

In [6]: isinstance([x for x in range(10)],Iterator)
Out[6]: False

In [7]: isinstance(100,Iterator)
Out[7]: False

iter()函数

生成器都是 Iterator 对象,但 list 、 dict 、 str 虽然是 Iterable ,却不是 Iterator 。把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使用 iter() 函数

In [1]: from collections import Iterable,Iterator

In [2]: isinstance([1,2,3],Iterable)
Out[2]: True

In [3]: isinstance([1,2,3],Iterator)
Out[3]: False

In [4]: isinstance(iter([1,2,3]),Iterable)
Out[4]: True

In [5]: isinstance(iter([1,2,3]),Iterator)
Out[5]: True

总结

  • 凡是可作用于 for 循环的对象都是 Iterable 类型;
  • 凡是可作用于 next() 函数的对象都是 Iterator 类型
  • 集合数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可以通过 iter() 函数获得一个 Iterator 对象。

你可能感兴趣的:(Python中的dict)